【问题标题】:NullReferenceException in Partial View, but not in "equivalent" View部分视图中的 NullReferenceException,但不在“等效”视图中
【发布时间】:2011-08-09 03:48:11
【问题描述】:

我是 MVC 3 / Razor 的新手,我在一个简单的网站上工作以学习基础知识。为此,我创建了一个简单的视图,它在 /Home/SignedInAs 的页面上呈现 DropDownList。

我的 Home Controller 中的逻辑是:

public class HomeController : Controller  
{  
  public ActionResult SignedInAs()  
  {  
    SignedInAsViewModel siavm = new SignedInAsViewModel();  
    siavm.SignedInAsOptions = db.GetSignedInAsOptions();  
    return View(siavm);
  }  
}  

其中 SignedInAsViewModel 很简单:

public class SignedInAsViewModel  
{  
  public SignedInAsViewModel()  
  {  
    this.SignedInAsOptions = new List<SignedInAs>();  
  }  

  public IEnumerable<SignedInAs> SignedInAsOptions { get; set; }  
}

db.GetSignedInAsOptions() 方法返回带有属性、ID 和名称的 SignedInAs 对象列表。

在 Views/Home/SignedInAs.cshtml 中,我有:

@model myMVCApp.Views.SignedInAsViewModel  
...  
@Html.DropDownList("ddlSignedInAs", new SelectList(Model.SignedInAsOptions, "ID", "Name", selectedValue))
...

Select 列表在我的 /Home/SignedInAs 页面上完全按照预期呈现。

我真正想做的是在每个页面的顶部呈现 DropDownList。所以,我创建了一个局部视图,_SignedInAsPartial:

@model myMVCApp.Views.SignedInAsViewModel
@if (Request.IsAuthenticated)
{   
  <text><div>@Html.DropDownList("ddlSignedInAs", new SelectList(Model.SignedInAsOptions, "ID", "Name", selectedValue))</div></text>
}  

还有一个控制器,SignedInAsController:

public class SignedInAsController : Controller
{
  public ActionResult ShowSignedInAs()
  {
    SignedInAsViewModel siavm = new SignedInAsViewModel();
    siavm.SignedInAsOptions = GetSignedInAsOptions();
    return PartialView(siavm);
  }
}  

(我在这里也试过return View(siavm)。)

在我所有页面使用的 _Layout.cshtml 中:

@Html.Partial("_SignedInAsPartial")  

现在尝试加载任何页面都会导致 NullReferenceException 并且可视化调试器在 _SignedInAsPartial.cshtml 处停止

在 SignedInAsController 中永远不会遇到断点。

我显然不明白这里的某些内容,而且我已经阅读了我能找到的所有内容。但我无法弄清楚。为什么选择列表在页面视图上渲染得很好,而在局部视图上却不行?

【问题讨论】:

    标签: asp.net-mvc-3 razor partial-views


    【解决方案1】:

    您必须将模型传递给局部视图,或者您可以使用 Html.RenderAction,这需要控制器操作来支持该视图。

    【讨论】:

    • 谢谢萨特金德。在反复讨论之后,我意识到我没有足够的 MVC 基础知识,所以我求助于阅读一本实际的书,而不是试图拼凑各种帖子和在线演练。
    猜你喜欢
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多