无法填充ViewModel

时间:2012-07-30 03:51:00

标签: asp.net-mvc-3 asp.net-mvc-viewmodel

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 Action并在db中创建记录。所以所有代码都有效。

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

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

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

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

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

@{ Model.Account.Number = 1000000; }

我需要能够以编程方式在控制器和视图中填充属性。我已经阅读了几篇关于如何在控制器中填充视图模型并在我们的代码上建模的SO帖子,但由于某种原因我的代码无效。我在这里做错了什么?我应该如何在Controller和View中进行操作?我知道对象在创建时是null,但无法弄清楚如何绕过它。

谢谢

1 个答案:

答案 0 :(得分:2)

您已实例化虚拟机,但未实例化其帐户属性...尝试此操作:

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;
}

虽然很少有这种情况可能属于视图。看起来应该在控制器中设置一些东西。