gpt4 book ai didi

asp.net-mvc-3 - MVC 3 + EF 4.1 + POCOs + ViewModel 模式 + 带有脚手架的 Controller == 困惑!

转载 作者:行者123 更新时间:2023-12-04 06:25:48 26 4
gpt4 key购买 nike

经过多年的 ASP.NET 表单开发,我 [终于!] 解决了 MVC(第 3 版)问题。我在 n 层应用程序架构方面有很强的背景,我正在尝试正确地处理这个新项目,明确分离关注点等。

我所做的是通过创建我的 POCO 从代码优先开始。由此,框架创建了我的数据库。

然后,我通过将我的所有 EF 查询和 CRUD 方法放在我的模型程序集中的每个 POCO 类的存储库类中来实现存储库模式。这样,我的 Controller 就不需要知道我如何通过 EF 访问我的数据。伟大的。

最后,我在我的模型程序集中创建了一些 ViewModel 类。我的意图是,对于某些操作(例如创建和编辑),我从 RAZOR View 引用我的 ViewModel 类,而不是我的 POCO 类。这样,我可以拥有我的 POCO 类以及用于在我的 ViewModel 中填充下拉列表的 SelectList。两者都由对关联存储库类的引用填充,这些存储库类是从我的 Controller 操作中调用的。我想我现在很顺利:

class MyObject 
{
public int ID {get;set}

[Required]
[StringLength(512)]
public string Name {get;set;}

}

class MyViewModel // ViewModel for a specific view
{
public MyObject MyModel {get;set;} // the model that is being edited

// other data the view might need, set by the controller
public string SomeMessage { get; set; }
public List<SomeObject> SomeObjects {get;set;} /// e.g. for a drop-down list

// My constructor below that populates the "SomeObjects" list, and accepts the
// "MyObject" class as a parameter in order to set the "MyModel" property above...
// ..........

}

问题...

在我开始使用 Controller 创建和编辑操作中的 ViewModel 类之前,我直接传入了 POCO 类。当我从 View 中的编辑表单中点击保存按钮时,一切正常:

旧代码:
[HttpPost]
public ActionResult Edit(MyObject mine)
{
if (ModelState.IsValid)
{
myRepository.Update(mine);
myRepository.SaveChanges();
return RedirectToAction("Index");
}
return View(mine);
}

当我点击保存时,我的 POCO 类(MyObject)将被返回,并自动填充表单中的值,它会成功保存,并且生活很美好。

当我切换到传入我的 ViewModel (MyViewModel) 时,一切都崩溃了。

我可以通过在我的编辑 View 顶部设置@model 引用来引用我的 ViewModel (MyViewModel)。然后我可以从我的 POCO 类 (MyObject) 中填充我的表单字段,它是 ViewModel 的一部分。我什至能够从 ViewModel 中的 SomeObjects 集合中填充 DropDownList,并从我正在编辑的 MyObject 类中预先选择正确的一个。一切似乎都很好 直到 ...

当我点击保存按钮并调用 Controller 的 Edit ActionResult(POST 操作)时,传入 ActionResult 的 MyObject 类(public ActionResult Edit(MyObject mine))为空。

然后,我尝试将传入的对象更改为我的 ViewModel (public ActionResult Edit(MyViewModel myVM)),其中引用的 MyObject 类 (MyModel) 为 null。

我错过了什么?

我知道它必须是非常简单的东西,它正盯着我的脸,我看不到它!

最佳答案

查看FormCollection,键的名称应该与您要填充的类的属性匹配。这就是 MVC 的默认模型绑定(bind)的工作方式。

关于asp.net-mvc-3 - MVC 3 + EF 4.1 + POCOs + ViewModel 模式 + 带有脚手架的 Controller == 困惑!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6066976/

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