问题描述
||
我继承了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替代方案。