场景:如何更新模型?
ASP MVC 6
我正在尝试更新模型。为了将模型信息传递给客户端(浏览器/应用程序),我正在使用DTO。
问题1:对于更新,我应该将整个对象放回去吗?
问题2:有什么方法可以让我轻松地仅传递更新后的信息?如果是,怎么办?
问题3:我可以使用JSON补丁进行更新吗?
问题2:有什么方法可以让我轻松地仅传递更新后的信息?如果是,怎么办?
是的。您应该创建一个视图模型,该模型应仅具有视图所需的那些属性。
假设您的用例是构建一个视图,该视图允许用户仅编辑其姓氏。
public class EditUserViewModel
{
public int Id {set;get;}
public string LastName {set;get;}
}
而在你的
public ActionResult Edit(int id)
{
var user = yourUserRepository.GetUser(id);
if(user!=null)
{
var v = new EditUserViewModel { Id=id,LastName=user.LastName};
return View(v);
}
return View("NotFound");
}
和看法
@model EditUserViewModel
@using(Html.BeginForm())
{
@Html.TextBoxFor(s=>S.LastName)
@Html.HiddenFor(s=>s.Id)
<input type="submit" id="saveBtn" />
}
和你的HttpPost动作
[HttpPost]
public ActionResult Edit(EditUserViewModel model)
{
// Since you know you want to update the LastName only,
// read model.LastName and use that
var existingUser = yourUserRepository.GetUser(model.Id);
existingUser.LastName = model.LastName;
yourUserRepository.Save();
// TO DO: redirect to success page
}
假设yourUserRepository
是您的数据访问类抽象的对象。
问题1:对于更新,我应该将整个对象放回去吗?
取决于最终用户的需求。通过这种视图模型方法,它将仅发布Id和LastName,这就是我们的用例。
我可以使用JSON补丁进行更新吗?
由于您仅发送需要更新的数据(部分数据),因此应该可以。
如果需要,您可以简单地序列化表单数据(仅具有Id和LastName),然后使用jQuerypost
方法将其发送到服务器。
$(function(){
$("#saveBtn").click(function(e){
e.preventDefault(); //prevent default form submit
var _form=$(this).closest("form");
$.post(_form.attr("action"),_form.serialize(),function(res){
//do something with the response.
});
});
});
为了防止发布过多,您可以Bind
在HttpPost操作方法上使用using属性使用绑定白名单。但是最安全的策略是使用与客户端允许发送的内容完全匹配的视图模型类。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句