我从视图中获取模型:
<script>
Module.getModel(@Html.Raw(Json.Encode(Model)))
</script>
这称之为:
var getModel = function(model) {
vModel= model;
};
这适用于初始获取模型,但我需要通过对话框ajax更新其中一个模型值。
var loc = $("#Location").val();
$.ajax({
url: $("#root").attr("href") + "Home/SetLocation",
context: $(this),
type: 'POST',
data: { location: loc },
success: function() {
$(this).dialog("close");
reloadGrid();
},
error: function() {
alert("There was a problem updating your Location.");
}
});
控制器操作将位置保存到配置文件并重定向到“索引”操作:
public ActionResult SetLocation(string location)
{
_dashboardTasks.SaveLocationToProfile(location);
return RedirectToAction("Index");
}
使用新的配置文件信息更新模型并将其返回到视图:
public ActionResult Index(HomeViewModel homeViewModel)
{
SetUserLocation(homeViewModel);
return View(homeViewModel);
}
此时再次点击第一个代码块上的断点,但永远不会调用它的函数getModel
,并且永远不会更新javascript模型。因此,要求网格重新加载的success
函数重用旧数据而不是新数据。
如何使用控制器中更改的值更新vModel
?
我是否必须向success
函数添加声明,明确重新定义值?
success: function() {
$(this).dialog("close");
vModel.Location = loc;
reloadGrid();
},
这样可行,但我不明白为什么不使用当前代码更新模型。