Asp.net mvc 3 Can';不填充视图模型
MVC3项目 我在视图模型中设置了几个类:帐户、地址、电话等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
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)