无法对空引用执行运行时绑定。 ViewBag.Title为null

时间:2015-01-26 09:26:10

标签: c# asp.net-mvc model-view-controller viewbag

我想提供一个简单的通用功能,只要我需要通知用户操作成功,就可以在页面顶部显示消息。 我的解决方案是将对象放入ViewBag.Info,其中包含有关邮件的详细信息,包括bool public IsMessage;,并在_Layout.cshtml中阅读,其中我有一个额外的隐藏div

我尝试在_Layout.cshtml中执行此操作的方式是将@(ViewBag.Info.IsMessage(false / true)中的内容放入隐藏字段并通过JavaScript读取。如果该字段包含“true”,则javascript将调用函数ShowEvent()

出于某种原因,如果我在@(ViewBag.Info.IsMessage.ToString().ToLower())中添加了行ViewBag.Title VS2010抱怨_Layout.cshtml

  

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

_Layout.cshtml的代码很简单:

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <link rel="Stylesheet" type="text/css" href="@Url.Content("~/Content/StyleSheet.css")" />
    <script src="~/Scripts/jquery-2.1.1.min.js" type="text/javascript"></script>
    <title>@ViewBag.Title</title>
</head>
<body>
    <input type="hidden" id="is-event" name="is-event" value="@(ViewBag.Info.IsMessage.ToString().ToLower())"/>
    <div class="recent-events"></div>
    <div>
        @if (IsSectionDefined("loginfo"))
        {
            @RenderSection("loginfo", false)
        }
        @RenderBody()
        @if (IsSectionDefined("Home"))
        {
            @RenderSection("Home", false)
        }
    </div>
</body>
</html>

View Index.cshtml的代码是:

@model TestProject.ViewModels.Account.UserData
@{
    ViewBag.Title = "Index";
    string identityName = HttpContext.Current.User.Identity.Name;
    string userrole = Model.UserRoles.FirstOrDefault();
}

<h2>Index</h2>
<br />

如您所见,ViewBag.Title已定义。

EDIT。 控制器的代码:

public ActionResult Index()
{
    // ...
    InfoModel infoModel = new InfoModel()
    {
        IsMessage = true, Duration = 3000, Message = "Logging in successfull", BackgroundColor = "#bbffbb"
    };
    ViewBag.Info = infoModel;
    ViewBag.Title = string.Empty;
    return View(userdata);
}

2 个答案:

答案 0 :(得分:3)

如果您尝试从非强类型的视图中引用模型,则可能会出现此问题。例如,输入

@Model.ID 

页面中的某个位置将尝试绑定到ViewModel的ID属性 - 如果尚未使用

在View页面顶部定义模型类型
@model MyModel 

然后它会用这个模糊的错误信息轰炸出来。

答案 1 :(得分:1)

确保您已在控制器操作中定义了ViewBag.Title。现在你已经在Index.cshtml视图中定义了它,但是首先渲染布局,所以到那时还没有设置值。