gpt4 book ai didi

asp.net - 有没有办法在 MVC2 中更新 ViewModel?

转载 作者:行者123 更新时间:2023-12-03 10:30:57 24 4
gpt4 key购买 nike

此代码有效:

[HttpPost]
public ActionResult Edit(int id, FormCollection fc)
{
Movie movie =
(
from m in _ctx.Movie.Include("MovieActors")
where m.MovieID == id select m
).First();
MovieActorViewModel movieActor = new MovieActorViewModel(movie);

if (TryUpdateModel(movieActor))
{
_ctx.ApplyPropertyChanges(movieActor.Movie.EntityKey.EntitySetName,
movieActor.Movie);
_ctx.SaveChanges();
}

return View(movieActor);
}

但是,我不确定如何对此进行测试,并且通常更希望该方法采用类型化模型,例如:
[HttpPost]
public ActionResult Edit(MovieActorViewModel movieActor)

这可能吗?为了启用它,我需要对我的 MovieActorViewModel 类进行哪些更改?该类如下所示:
public class MovieActorViewModel
{
public Movie Movie { get; set; }
public Actor Actor { get; set; }

public PublisherDealViewModel(Movie movie)
{
this.Movie = movie;
this.Actor =
(
from a in this.Movie.Actors
where a.ActorID == 1 select a
).First();
}
}

View 的类型(继承 ViewPage)很简单:
<% using (Html.BeginForm()) {%>
Movie Title: <%= Html.TextBoxFor(model=>model.Movie.Title) %><br/>
Actor Name: <%= Html.TextBoxFor(model=>model.Actor.Name) %>
<% } %>

最佳答案

这是绝对可能的。 MVC2 中的默认绑定(bind)器将尝试根据表单中字段的名称绑定(bind)表单中发布到操作的值。如果您使用 Html.TextBoxFor() 之类的帮助程序并且您的模型名称正确匹配,模型中的值应该自动填充。

但是,如果表单中的名称与 ViewModel 上的属性不完全匹配,则可能需要进行一些调整。在某种程度上,您可以使用 BindAttribute 自定义绑定(bind)发生的方式:

public ActionResult SomeAction([Bind(Prefix="MyEntity" Include="Property1,Property2)] MyEntityModel someEntity)

BindAttribute 允许您指定要绑定(bind)的属性,并且您可以使用 Exclude 参数从绑定(bind)中显式排除某些属性。如果要将表单中的属性绑定(bind)到 ViewModel 中复杂对象的属性(即 MyViewModel.MyDataObject),则可以使用 Prefix。在这种情况下,当您使用强类型帮助器时,您的表单名称将是“MyDataObject.FirstName”。前缀允许您为表单字段名称指定前缀。

您还可以定义完全自定义的 Binder。 LosTechies 的 Jimmy 董事会拥有 blog post对这个。

关于asp.net - 有没有办法在 MVC2 中更新 ViewModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2360302/

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