Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 Can';不填充视图模型_Asp.net Mvc 3_Asp.net Mvc Viewmodel - Fatal编程技术网

Asp.net mvc 3 Can';不填充视图模型

Asp.net mvc 3 Can';不填充视图模型,asp.net-mvc-3,asp.net-mvc-viewmodel,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 action中,我只调用视图 public ActionR

MVC3项目

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

namespace ViewModels
{
  public class AccountVM
  {
    public Account Account { get; set; }
    public Address Address { get; set; }
    public Phone Phone { get; set; }       }
在控制器GET action中,我只调用视图

  public ActionResult Create()
  { return View(); }
在视图中,我传递视图模型

@model AccountVM
然后,我使用@Html.EditorFor填充所有字段,并成功地将其传递给POST操作,并在db中创建记录。所以所有的代码都在工作

@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文章,并在这些文章上对我的代码进行了建模,但由于某些原因,我的代码无法工作。我做错了什么?我应该如何在控制器和视图中进行操作?我知道对象在创建时是空的,但我不知道如何绕过它


谢谢

您已经实例化了VM,但没有实例化它的帐户属性。。。试试这个:

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

虽然很少有时候这可能属于视图。它看起来应该在控制器中设置。

Drumbog。事实上,我已经这样做了,但得到了一个错误,然后在我的故障排除(一定是一个打字错误)的跟踪。这就是我们需要做的。谢谢你让我重回正轨。我还发现,为了将控制器中设置的任何值传递给发送给POST操作的模型,需要对视图中输入表单中的每个属性使用@Html.HiddenFor@Html.HiddenFor(z=>z.Account.Number)