当我尝试渲染不同控制器的局部视图时,获取对象引用异常。
主视图
@model Models.Users
--------
@Html.Partial("~/Views/Address/AddressCreate.cshtml",Model.address)
--------
这是行动
public ActionResult Create()
{
var model = new Users();
return View(model);
}
部分视图
@model Models.Address
<div>@Html.TextBoxFor(m=>m.AddressLine1)</div>
部分视图
public ActionResult AddressCreate()
{
var model = new Address();
return PartialView(model);
}
用户和地址类
public class Users
{
public Address address {get; set;}
}
public class Address
{
// address objects
}
答案 0 :(得分:6)
将address
模型传递给主视图时,Users
模型的public ActionResult Create()
{
var model = new Users();
model.address = new Address();
return View(model);
}
属性似乎为空。
因此,请通过明确初始化来确保不是这种情况:
public class Users
{
public Users()
{
this.address = new Address();
}
public Address address { get; set; }
}
或者您可以在模型的构造函数中执行此操作:
AddressCreate
这就是说,我在你的代码中注意到了一些奇怪的事情。您似乎已声明了一些永远不会使用的Html.Partial
控制器操作,因为您使用Html.Action
帮助器呈现了部分操作。如果你想使用child action
渲染部分,那么你肯定应该使用@model Models.Users
--------
@Html.Action("AddressCreate")
--------
助手:
AddressCreate
现在将调用Address
操作并成功将address
模型填充到相应的部分。在这种情况下,您不再需要在主视图模型上显式实例化Html.Partial
属性,因为它永远不会被使用。
请确保您了解Html.Action
和{{1}}助手之间的差异。
答案 1 :(得分:0)
实际上,代码不会调用AddressCreate,因此从不设置地址视图模型 此外,您的Create方法不会将地址填充到它返回的用户中。
你需要 1)在create方法中填充用户的地址(并删除AddressCreate方法)。
或者
2)在视图中使用Html.Action而不是Html.Partial来调用AddressCreate方法。