使用MVC从客户端向ViewData分配值

问题描述

|| 我继承了MVC应用程序,并且是来自ASP.NET环境的真正的新手。我的问题是我无法在局部视图和控制器之间移动变量数据。在ASP.NET中,这非常简单,而在MVC中则不是这样。因此,当从客户端选择Tab时触发以下代码,但我需要从客户端捕获selectedTabIndex值并将其传递给控制器​​。
    function onTabSelect(e) {
    var selectedTabIndex = 0;
    selectedTabIndex = $(e.item).index();
    alert(selectedTabIndex);
    }
我考虑过使用ViewData对象,但是似乎没有一种方法可以从函数内部执行分配任务。因此,以下代码似乎是一个荒谬的任务,并且无论如何都会失败。 (请记住,我是这个方面的新手)
    function onTabSelect(e) {
    var selectedTabIndex = 0;
    <% =ViewData[\"selectedTabIndex\"]%> = selectedTabIndex;      
    }
我也考虑过使用cookie,但这似乎也不是一种实用的方法。在ASP.NET中,我可以使用.find方法访问客户端控件,但这对我来说是一个艰难的学习过程。 我有什么选择?     

解决方法

如果用户可以在“保存”操作之间选择不同的选项卡,则可能需要考虑绑定某种单击功能(使用jQuery)来设置
selectedTabIndex
javascript变量。或者,您可以将隐藏的输入值设置为选定的选项卡索引。 无论哪种情况,如果在提交保存操作时需要控制器中的值(以设置ViewData,ViewBag,某些模型数据等),则可以通过via3ѭ提交数据并从控制器返回一些JSON
$(\'#SaveButton\').click(function() {
  $.ajax({
    url: \'/Controller/Save\',type: \'POST\',// you might need to serialize additional data you want to save here
    // but you could create any JSON object before calling $.ajax
    data: {\"selectedTabIndex\": selectedTabIndex},// data to POST
    dataType: \'json\',// this indicates the type of data returned from controller
    success: function(data) {
      // you didn\'t really describe how to programatically set a tab,// so \"setToTab\" is a guess
      $(\'#tabID\').setToTab(data.selectedTabIndex);
    }
  });
}
您的控制器可能看起来像
public ActionResult Save(int selectedTabIndex)
{
  // again,you might need different parameters to complete your Save
  return JsonResult(new { selectedTabIndex: selectedTabIndex });
}
    ,数据通过“ 6”发送到控制器。创建一个隐藏的输入
<input type=\"hidden\" name=\"selectedTabIndex\"/>
,并在
POST
之前使用javascript设置值。控制器可以从Form参数中提取该值,或者如果该方法包含与输入名称匹配的参数,则可以在Action方法中自动填充该值。 这是David提供的答案的非ajax替代方案。