我继承了一个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;
}
我也考虑过使用cookies,但这似乎也不是一种实用的方法。在ASP.NET中,我可以使用.find方法访问客户端控件,但这对我来说是一个陡峭的学习曲线。
我的替代方案是什么?
答案 0 :(得分:3)
如果用户可以在保存操作之间选择不同的选项卡,则可能需要考虑绑定某种点击功能(使用jQuery)来设置selectedTabIndex
javascript变量。或者,您可以将隐藏输入的值设置为选定的选项卡索引。
在任何一种情况下,如果您在提交保存操作时需要控制器中的值(设置ViewData,ViewBag,某些模型数据等),您可以通过$.ajax
提交数据并返回一些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 });
}
答案 1 :(得分:0)
通过HTTP POST
将数据发送到控制器。创建一个隐藏的输入<input type="hidden" name="selectedTabIndex"/>
,并在POST
之前使用javascript设置值。控制器可以从Form参数中提取此值,或者如果方法包含与输入名称匹配的参数,则可以在Action方法中自动填充。
这是answer provided by David的非替代品。