- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
场景:如何更新模型?
ASP MVC 6
我正在尝试更新模型。为了将模型信息传递给客户端(浏览器/应用程序),我使用的是 DTO。
问题 1:为了更新,我应该将整个对象发回吗?
问题二:有没有什么办法可以方便的只传递更新的信息?如果是,如何?
问题三:是否可以使用JSON Patch进行更新?
最佳答案
Question 2: Is there a way I can easily pass only the information that is updated? If yes, how?
是的。您应该创建一个 View 模型,它应该只包含 View 所需的那些属性。
假设您的用例是构建一个允许用户仅编辑其姓氏的 View 。
public class EditUserViewModel
{
public int Id {set;get;}
public string LastName {set;get;}
}
在你的 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");
}
和 View
@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
是您的数据访问类抽象的对象。
Question 1: For updating, should I post the whole object back?
取决于您希望从最终用户那里得到什么。使用这种 View 模型方法,它将仅发布 Id 和 LastName,这就是我们的用例。
Can I use JSON Patch for updating?
由于您只发送需要更新的数据(部分数据),所以应该没问题。
如果你愿意,你可以简单地序列化你的表单数据(只有 Id 和 LastName)并使用 jQuery post
方法将它发送到你的服务器。
$(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.
});
});
});
防止overposting ,您可以在 HttpPost 操作方法上使用 Bind
属性来使用绑定(bind)白名单。但最安全的策略是使用与允许客户端发送的内容完全匹配的 View 模型类。
关于asp.net - 如何在 ASP NET MVC 6 中更新模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34125780/
我是一名优秀的程序员,十分优秀!