0

MVC3 项目。

我有几个类:我在视图模型中设置的帐户、地址、电话等

namespace ViewModels
{
  public class AccountVM
  {
    public Account Account { get; set; }
    public Address Address { get; set; }
    public Phone Phone { get; set; }       }

在控制器 GET 操作中,我只是调用视图

  public ActionResult Create()
  { return View(); }

在视图中我通过视图模型

@model AccountVM

然后我使用@Html.EditorFor 填充所有字段并成功地将其传递给 POST 操作并在数据库中创建记录。所以所有这些代码都在工作。

@Html.EditorFor(z => z.Account.Number)

当我尝试预先填充一些属性时,问题就出现了。我在 GET 操作中执行以下操作。

    public ActionResult Create()
    { var viewModel = new AccountVM();
      viewModel.Account.Number = 1000000;
      return View(viewModel); }

代码通过了 Intellisense,但是当我运行时,我得到“用户代码未处理 NullReferenceException - 对象引用未设置为对象的实例”错误。

如果我尝试使用视图中的代码进行填充,我会得到同样的错误。

@{ Model.Account.Number = 1000000; }

我需要能够以编程方式填充控制器和视图中的属性。我已经阅读了几篇关于如何在控制器中填充视图模型并在它们上建模我的代码的 SO 帖子,但由于某种原因我的代码无法正常工作。我在这里做错了什么?我应该如何在控制器和视图中处理它?我知道对象在创建时为空,但不知道如何解决这个问题。

谢谢

4

1 回答 1

2

您已经实例化了 VM,但没有实例化其 Account 属性...试试这个:

public ActionResult Create()
{
    var viewModel = new AccountVM();
    viewModel.Account = new Account();
    viewModel.Account.Number = 1000000;
    return View(viewModel);
}

视图也是如此:

@{
    if (Model.Account == null) {
        Model.Account = new Account();
    }
    Model.Account.Number = 1000000;
}

尽管很少有这可能属于视图。看起来应该在控制器中设置一些东西。

于 2012-07-30T03:54:40.847 回答