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方法。

为什么需要为部分调用控制器操作?为什么需要为部分调用控制器操作?