gpt4 book ai didi

asp.net - 如何在 ASP NET MVC 6 中更新模型?

转载 作者:行者123 更新时间:2023-12-02 03:20:06 26 4
gpt4 key购买 nike

场景:如何更新模型?

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com