Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法对空引用执行运行时绑定。ViewBag.Title为空_C#_Asp.net Mvc_Model View Controller_Viewbag - Fatal编程技术网

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