使用部分视图的对象引用错误

时间:2013-02-14 16:51:57

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我收到了无处不在的“对象引用”错误,并且不知道如何解决它。我认为这与调用局部视图有关。我使用的是jquery向导,因此部分视图是向导中显示的“步骤”。

在我的主.cshtml视图中,我执行此操作(我将遗漏HTML):

@using MyNamespace.Models
@using MyNamespace.ViewModels
@model MyViewModel
...
...
using (Html.BeginForm())
{
    ...
    // this works inside MAIN view (at least it goes through 
    // before I get my error)
    if (Model.MyModel.MyDropDown == DropDownChoice.One)
    {
         //display something
    }
    ...
    // here i call a partial view, and in the partial view (see
    // below) I get the error
    @{ Html.RenderPartial("_MyPartialView"); }
    ...
}

上述工作(至少在我遇到错误之前就已经过了)。

这是我的部分视图(再次,省略HTML):

@using MyNamespace.Models
@using MyNamespace.ViewModels
@model MyViewModel
....
// I get the object reference error here
@if (Model.MyModel.MyRadioButton == RadioButtonChoice.One)
{
    // display something
}
....

我很困惑,因为@ifif除外,它基本上是相同的代码。我不知道我做错了什么,或者如何解决。

对于上下文,这里是MyViewModel

public class MyViewModel
{
    public MyModel MyModel { get; set; }
}

MyDropDownMyRadioButton正在使用enums

public enum DropDownChoice { One, Two, Three }
public enum RadioButtonChoice { One, Two, Three }

public DropDownChoice? MyDropDown { get; set; }
public RadioButtonChoice? MyRadioButton { get; set; }

我的控制器只对主窗体执行操作,而对局部视图没有操作:

public ActionResult Form()
{
    return View("Form");
}

[HttpPost]
public ActionResult Form(MyViewModel model)
{
    if (ModelState.IsValid)
    {
        return View("Submitted", model);
    }
    return View("Form", model);
}

有什么想法?我是否必须为该局部视图创建ActionResult,即使没有直接调用它(除了作为向导中的局部视图)?谢谢。

1 个答案:

答案 0 :(得分:5)

您的部分需要模型

@model MyViewModel

您需要传递模型

@{ Html.RenderPartial("_MyPartialView", MyViewModel);

或者使用子动作并使用

调用您的部分动作
@Action("_MyPartialView");

带有相应的行动

    public ActionResult _MyPartialView()
    {

        MyViewModel model = new MyViewModel();
        return View(model)
    }