使用ViewModel模型的Razor Partial

时间:2011-09-20 13:07:32

标签: c# asp.net-mvc razor

我的帐户控制器上有一个设置操作,用于呈现设置视图。

在设置视图中,我收到了一个包含ChangePasswordModel的ViewModel。

这是SettingsViewModel:

public class SettingsViewModel
{
    public ChangePasswordModel ChangePasswordModel { get; set; }
}

设置视图收到

@model XBLTools.Models.SettingsViewModel

ChangePassword View收到

@model XBLTools.Models.ChangePasswordModel

ChangePassword视图单独运行正常。 如何渲染ChangePassword视图传递Model.ChangePasswordModel?

我尝试了一些组合而没有成功获得不同的错误:

@Html.RenderPartial("ChangePassword", (XBLTools.Models.ChangePasswordModel)(Model.ChangePasswordModel))

@Html.RenderPartial("ChangePassword", Model.ChangePasswordModel)

@Html.Partial("ChangePassword", (XBLTools.Models.ChangePasswordModel)(Model.ChangePasswordModel))

@Html.Partial("ChangePassword", Model.ChangePasswordModel)

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

如果在新的ChangePasswordModel实例中传递了null:

@Html.RenderPartial("ChangePassword", new ChangePasswordModel())

或者在SettingsViewModel的构造函数中实例化它:

public class SettingsViewModel
{
    public SetttingsViewModel() 
    {
        ChangePasswordModel = new ChangePasswordModel();
    }
    public ChangePasswordModel ChangePasswordModel { get; set; }
}

答案 1 :(得分:1)

您只需传递您的模型属性:

@Html.Partial("ChangePassword", Model.ChangePasswordModel)

如果ChangePasswordModel属性为null,则会出现错误,因为局部视图需要模型。
确保已将ChangePasswordModel属性设置为实例。

或者,您只需传递一个新的ChangePasswordModel实例:

@Html.Partial("ChangePassword", new ChangePasswordModel())

答案 2 :(得分:1)

您应该在控制器中的设置视图模型上初始化ChangePasswordModel。

public ActionResult MyAction()
{

   var model = new SettingsViewModel{
          ChangePasswordModel = new ChangePasswordModel()
       }
   return View(model);

}

然后使用:

@Html.Partial("ChangePassword", Model.ChangePasswordModel)