gpt4 book ai didi

asp.net-mvc - ASP.NET MVC UpdateModel() 方法是如何工作的?

转载 作者:行者123 更新时间:2023-12-03 09:26:44 25 4
gpt4 key购买 nike

我正在开发我的第一个 .NET MVC 应用程序并使用 NerdDinner 教程作为引用点。目前让我感兴趣的一点是UpdateModel()方法。 (我不喜欢使用我不太了解的东西。)

取自 NerdDinner tutorial -

//
// POST: /Dinners/Edit/2

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection formValues) {

Dinner dinner = dinnerRepository.GetDinner(id);

UpdateModel(dinner);

dinnerRepository.Save();

return RedirectToAction("Details", new { id = dinner.DinnerID });
}

我的主要问题是 UpdateModel()可以访问在 Edit 方法中传递的 formValues 吗?为什么集合没有作为参数显式传递给方法?

最佳答案

UpdateModel() 是一个 Controller 辅助方法,它尝试将一堆不同的输入数据源(来自 View 的 HTTP POST 数据、QueryString 值、 session 变量/Cookie 等)绑定(bind)到您指定为参数的显式模型对象。本质上,它仅用于模型绑定(bind)。

如果您将 Action 的输入参数表示为强类型模型(如 View 模型),那么您已经完成了调用 UpdateModel() 时在后台完成的所有步骤。如果您从 DataContext 中检索一个对象并编辑其属性,则只需 SaveChanges() 即可将更新推送回数据库(在本例中为 Save())。

例子:

//
// POST: /Dinners/Edit/2

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(DinnerViewModel incoming) {

var dinner = dinnerRepository.GetDinner(incoming.DinnerID);
dinner.Description = incoming.Description;
dinnerRepository.Save();

return RedirectToAction("Details", new { id = incoming.DinnerID });
}

但是,有一个将 UpdateModel() 与强类型模型一起使用的用例:当您传入强类型模型并希望其值直接替换数据库中实体的值时(前提是它们都已命名并已键入相同)。在这种情况下,您将检索对象,在其上使用 UpdateModel(),其模型绑定(bind)操作会将任何具有类似名称和类型的属性从强类型对象中拉入检索到的对象。换句话说,它将执行 反射(reflection) 为你。

因此,就像您的示例一样,如果您希望在不指定要更新的情况下更新所有属性,并且您的强类型模型和数据库模型具有类似名称的属性,您仍然希望使用 UpdateModel() 来利用反射。

例子:
//
// POST: /Dinners/Edit/2

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(DinnerViewModel incoming) {

var dinner = dinnerRepository.GetDinner(incoming.DinnerID);
UpdateModel(dinner);
dinnerRepository.Save();

return RedirectToAction("Details", new { id = incoming.DinnerID });
}

这里唯一的优势(相对于使用 FormCollection 对象)是您可以访问强类型对象的所有其他属性(如incoming.DinnerID 所示)。

结论:如果要将强类型对象转换为派生对象,使用 UpdateModel() 可能是最简单的。但是,如果您只是更新派生对象的一些属性,这在很大程度上是不必要的。另外,请注意,使用 Entity Framework (而不是 Linq to SQL 之类的东西)使所有这些都没有实际意义,因为它可以将强类型对象和派生对象与其自己的方法相关联。

关于asp.net-mvc - ASP.NET MVC UpdateModel() 方法是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1087279/

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