获取按钮上的活动标签并将其传递给控制器​​

问题描述:

我目前正在使用MVC3和Bootstrap。获取按钮上的活动标签并将其传递给控制器​​

我有几个Bootstrap选项卡的视图。此外,我有一个按钮[创建]调用控制器中的Create()函数。

当点击[创建]按钮,我需要以下条件:

1.-获取活动标签ID,以便将它传递给控制器​​。

2:留守当前(活动)选项卡上,当用户已张贴数据和页面重新加载

我知道,我需要使用Javascript功能来获取活动标签和AJAX的ID传递给控制器。我试图以不同的方式混合成功。其实我在新手AJAX,但我注意到,我的思念调用按钮单击事件的行动,但我不知道如何编纂它:(

我的JS:

$(function() { 
    var activeTab = null; 
    $('a[data-toggle="tab"]').on('shown', function (e) { 
     activeTab = e.target; 
     //save the latest tab 
     localStorage.setItem('lastTab', $(e.target).attr('id')); 

     $.ajax({ 
       url: '@Url.Action("Create")', 
       type: 'GET', 
       data: postData, 
       success: function(result) { 

       } 
      }); 

    }); 

     //go to the latest tab, if it exists: 
     var lastTab = localStorage.getItem('lastTab'); 
     if (lastTab) { 
     $('#'+lastTab).tab('show'); 
     } 
}); 

事先[创建]按钮......

<button type="submit" class = "btn btn-success"> 
    <i class="icon-plus icon-white"></i> Create 
</button> 

任何帮助将不胜感激。

谢谢!

有很多方法可以做到这一点,它只取决于你想使用什么技术/框架。如果你想坚持使用vanilla MVC,你可以看看AjaxHelpers。这些提供标记帮助程序,如@Ajax.BeginForm(...)@Ajax.ActionLink(...),它们自动提交表单数据或通过AJAX调用从链接调用控制器操作。

如果您想更好地控制AJAX调用的方式,您可以查看Backbone.jsKnockout.js等客户端框架。我更喜欢Knockout,因为它允许您轻松采用MVC中的MVVM设计模式。例如,这里有一个简单的淘汰赛视图模型:

var ViewModel = function() { 
    var self = this; 

    self.tabs = ko.observableArray([ 
     { id: 1, name: 'Tab 1' }, 
     { id: 2, name: 'Tab 2' }, 
     { id: 3, name: 'Tab 3' } 
    ]); 

    self.saveChanges = function() { 

     // Here's where you can get the id of the selected tab 
     // and make your ajax call 

     var tab = $('.tab-content > .active').get(0);   
     alert('Hello from Tab ' + $(tab).attr('id')); 
    }; 
} 

而且标记:

<ul class="nav nav-tabs" data-bind="foreach: tabs"> 
    <li data-bind="css: { 'active': $index() === 0 }"> 
     <a data-bind="attr: { href: '#' + $data.id }, text: $data.name" data-toggle="tab"></a> 
    </li> 
</ul> 

<div class="tab-content"> 
    <!-- ko foreach: tabs --> 
    <div class="tab-pane" data-bind="attr: { id: $data.id }, css: { 'active': $index() === 0 }"> 
     <p data-bind="text: $data.name + ' content...'"></p> 

     <button class="btn" data-bind="click: $parent.saveChanges">Save</button> 
    </div> 
    <!-- /ko --> 
</div> 

在这个例子中,视图模型决定了哪些栏目显示,哪些行为可以在客户端调用。要看到这个实际工作,请参阅此小提琴:http://jsfiddle.net/5qx29/

+0

感谢您的回答。其实我在我的MVC3项目上使用jQuery和Bootstrap。你的小提琴像一个魅力,它正是我所期待的,但对我来说似乎相当复杂。这个障碍是我想避免使用其他库。我认为我接近解决方案,但正如我所说,我是jQuery和AJAX的新手,我知道我的代码缺少按钮上的onClick事件以及控制器调用中的参数。 – equisde 2013-03-22 10:31:20

+0

本身没有任何“劣势”坚持jQuery,但我仍然强烈建议学习如何使用我链接到的AjaxHelpers。由于我没有真正使用它们,我没有提供任何示例。 – sellmeadog 2013-03-22 17:45:28

+0

谢谢@sellmeadog我会按照你的建议来了解这些帮助者,我会尽量用它们来做。 – equisde 2013-03-25 09:29:09