C# 渲染局部视图时对象引用未设置为实例
当我尝试渲染不同控制器的部分视图时,获取对象引用异常 主视图C# 渲染局部视图时对象引用未设置为实例,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,当我尝试渲染不同控制器的部分视图时,获取对象引用异常 主视图 @model Models.Users -------- @Html.Partial("~/Views/Address/AddressCreate.cshtml",Model.address) -------- 这就是行动 public ActionResult Create() { var model = new Users(); return View(model); }
@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 class Users
{
public Address address {get; set;}
}
public class Address
{
// address objects
}
将
用户
模型上的地址
属性传递到主视图时,该属性似乎为空
因此,请通过显式初始化来确保情况并非如此:
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
controller操作,但该操作从未使用过,因为您使用Html.partial
helper呈现了部分。如果要使用渲染器渲染部分,则必须使用Html.Action
helper:
@model Models.Users
--------
@Html.Action("AddressCreate")
--------
现在将调用AddressCreate
操作,并成功地将Address
模型填充到相应的部分。在这种情况下,您不再需要在主视图模型上显式实例化address
属性,因为它永远不会被使用
只需确保您理解
Html.Partial
和Html.Action
助手之间的区别。将用户
模型上的地址
属性传递到主视图时,该属性似乎为空
因此,请通过显式初始化来确保情况并非如此:
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
controller操作,但该操作从未使用过,因为您使用Html.partial
helper呈现了部分。如果要使用渲染器渲染部分,则必须使用Html.Action
helper:
@model Models.Users
--------
@Html.Action("AddressCreate")
--------
现在将调用AddressCreate
操作,并成功地将Address
模型填充到相应的部分。在这种情况下,您不再需要在主视图模型上显式实例化address
属性,因为它永远不会被使用
只需确保您理解
Html.Partial
和Html.Action
帮助程序之间的区别。实际上,代码不会调用AddressCreate,因此永远不会设置地址视图模型。此外,Create方法不会将地址填充到它返回的用户中 你要么 1) 在create方法中填充用户的地址(并去掉AddressCreate方法) 或
2) 在视图中使用Html.Action而不是Html.Partial来调用AddressCreate方法。实际上,代码不会调用AddressCreate,因此永远不会设置Address视图模型。
此外,Create方法不会将地址填充到它返回的用户中 你要么 1) 在create方法中填充用户的地址(并去掉AddressCreate方法) 或
2) 在视图中使用Html.Action而不是Html.Partial来调用AddressCreate方法。为什么需要为部分调用控制器操作?为什么需要为部分调用控制器操作?