我正在尝试使用后台Ajax Post更新模型,下面是我现有的代码
Javascript(Jquery)
var url = '@Url.Action("UpdateValue", "MyController")';
$.post(url, $('form').serialize(), function (view) {
//...
});
控制器
[HttpPost]
public ActionResult UpdateValue(MyViewModel model)
{
model.FileName = "NewValue";
return Json(new { success = true });
}
此代码将现有模型发布到控制器,然后我更新字段FileName
,但这似乎不保留更新的值(“NewValue”)。如何使用新值更新现有模型?
答案 0 :(得分:3)
在操作中设置model.FileName不会对UI或数据库执行任何操作。这取决于您要更新的内容,但如果您尝试更新UI,则需要将模型推回到客户端,然后通过客户端JavaScript重新加载UI(因为您正在执行AJAX帖子用JQuery)。
答案 1 :(得分:0)
如何发回更新的模型:
[HttpPost]
public ActionResult UpdateValue(MyViewModel model)
{
model.FileName = "NewValue";
return Json(model);
}
然后在$ .post中,您可以阅读回复并更新您的字段。
正如Brain Mains评论的那样,你不能坚持这个模型。模型是访问POSTed值的好方法。
假设您发布的值超过FileName。所以不要这样做:
Request.Form["FileName"];
Request.Form["Id"];
Request.Form["Size"];
你这样做:
model.FileName
model.Id
model.Size
使用起来更干净,更好。
因此,如果您按照发布数据的过程进行操作:
用户点击按钮>数据通过ajax提交>到达asp.net引擎>引擎将提交的数据绑定到模型>将模型传递给控制器>控制器返回一个结果(在这一刻...... hackemate!......模型消失了)