C# 无法对空引用执行运行时绑定。ViewBag.Title为空
我想提供一个简单的通用功能,以便在需要通知用户操作成功时在页面顶部显示消息。 我的解决方案是将一个对象放入C# 无法对空引用执行运行时绑定。ViewBag.Title为空,c#,asp.net-mvc,model-view-controller,viewbag,C#,Asp.net Mvc,Model View Controller,Viewbag,我想提供一个简单的通用功能,以便在需要通知用户操作成功时在页面顶部显示消息。 我的解决方案是将一个对象放入ViewBag.Info中,该对象包含有关消息的详细信息,包括boolpublicismessage并在\u Layout.cshtml中阅读,其中我有一个额外的隐藏div 我在\u Layout.cshtml中尝试这样做的方式是,我将@(ViewBag.Info.IsMessage(false/true)中的内容放入一个隐藏字段,并通过JavaScript读取。如果该字段包含“true”,
ViewBag.Info
中,该对象包含有关消息的详细信息,包括boolpublicismessage
并在\u Layout.cshtml
中阅读,其中我有一个额外的隐藏div
我在\u Layout.cshtml
中尝试这样做的方式是,我将@(ViewBag.Info.IsMessage
(false/true)中的内容放入一个隐藏字段,并通过JavaScript读取。如果该字段包含“true”,JavaScript将调用函数ShowEvent()
出于某种原因,如果我在\u Layout.cshtml
中添加行@(ViewBag.Info.IsMessage.ToString().ToLower())
VS2010会抱怨ViewBag.Title
“无法对空引用执行运行时绑定”
\u 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>
如您所见,已定义了ViewBag.Title
编辑。
控制器的代码:
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);
}
确保您已在控制器操作中定义了
ViewBag.Title
。现在您已在Index.cshtml
视图中定义了它,但布局是首先呈现的,因此此时值尚未设置。如果您试图从非强类型的视图中引用模型,则可能会出现此问题。对于ins打字
@Model.ID
页面中的某个位置将尝试绑定到ViewModel的ID属性-如果您尚未使用在视图页面顶部定义模型类型
@model MyModel
然后它会被这个模糊的错误消息炸开。VS2010抱怨
@ViewBag.Title
不是@ViewBag.Info…
,并且Info
对象是在控制器中定义的。你是对的。我没有注意到你在视图中定义了ViewBag.Title,而不是在控制器操作中。我已经更新了我的答案。不,这是错误的尽管我在控制器中添加了ViewBag.Title=string.Empty;
,但仍在抱怨。这很奇怪。我无法重现该问题。如果在控制器操作中设置了ViewBag.Title,您应该可以在布局中使用它。不知怎的,一旦我添加了带有额外ViewBag但ViewBag propert的行,它就会出现问题ies在控制器中完全定义。
@model MyModel