如何将具有自己的控制器的局部视图添加到asp.net mvc 4中的另一个视图

时间:2015-06-09 09:05:23

标签: c# asp.net-mvc

我有一个部分视图,只有一行名为Messages.ascx,位于~/Views/Shared/Messages.ascx

位置
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<h2><%:ViewBag.MyMessage.ToString() %></h2>

局部视图的控制器如下

public ActionResult Messages()
{
    ViewBag.MyMessage = "This is my Partial Message";
    return PartialView();
}

我只需要在我的index.asp页面中添加这个局部视图,该页面位于~/Views/Home/Index.aspx。我添加了部分视图如下

<%: Html.Partial("Messages") %>

但是,当我编译并运行时,我在浏览器上收到以下消息

  

无法对空引用执行运行时绑定

Line 1:  <%@ Control Language="C#"> Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %> 
Line 2:
Line 3:  <h2><%:ViewBag.MyMessage.ToString() %></h2>

请帮助我如何将局部视图添加到主视图中。

1 个答案:

答案 0 :(得分:2)

当你这样做时

<%: Html.Partial("Messages") %>

将呈现~/Views/Shared/Messages.ascx的内容,但下面的控制器操作方法将不会被执行

public ActionResult Messages()
{
    ViewBag.MyMessage = "This is my Partial Message";
    return PartialView();
}

所以ViewBag.MyMessage为空,因为这种语法而导致错误

<h2><%:ViewBag.MyMessage.ToString() %></h2>

您需要在视图中使用Html.Action方法执行控制器操作方法。由于控制器类为MessagesController,因此请更改此语法

<%: Html.Partial("Messages") %>

到这个

<%: Html.Action("Messages", "Messages") %>