Ne peut pas effectuer la liaison de runtime sur une référence nulle. ViewBag.Le titre est nul
Je veux fournir un simple général de la fonctionnalité afficher un message en haut de la page à chaque fois que j'ai besoin d'informer l'utilisateur que l'opération est réussie.
Ma solution serait de mettre un objet dans ViewBag.Info
qui contient les détails d'un message, y compris bool public IsMessage;
et de la lire _Layout.cshtml
où j'ai un supplément caché div
.
La façon dont je suis en train de le faire dans _Layout.cshtml
est j'ai mis ce que @(ViewBag.Info.IsMessage
(faux/vrai) dans un champ caché et de le lire en JavaScript. Si le champ contient "vrai", le javascript va appeler une fonction ShowEvent()
.
Pour une raison quelconque, si j'ajoute la ligne @(ViewBag.Info.IsMessage.ToString().ToLower())
VS2010 se plaint ViewBag.Title
dans _Layout.cshtml
.
"Impossible d'effectuer la liaison de runtime sur une référence null"
Le code de _Layout.cshtml
est simple:
<!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>
Et le code de la Vue Index.cshtml
est:
@model TestProject.ViewModels.Account.UserData
@{
ViewBag.Title = "Index";
string identityName = HttpContext.Current.User.Identity.Name;
string userrole = Model.UserRoles.FirstOrDefault();
}
<h2>Index</h2>
<br />
Comme vous pouvez le voir ViewBag.Title
est défini.
MODIFIER.
Le code du contrôleur:
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);
}
OriginalL'auteur Celdor | 2015-01-26
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir ce problème si vous essayez de faire référence à un Modèle à partir d'un point de Vue qui n'est pas fortement typé. Par exemple, la saisie
quelque part dans la page va tenter de se lier à la propriété ID du ViewModel - si vous n'avez pas défini le type de modèle en haut de la page d'Affichage avec
alors il sera de la bombe avec cette obscure message d'erreur.
OriginalL'auteur Steve Woods
Assurez-vous que vous avez défini le
ViewBag.Title
dans votre contrôleur de l'action. Maintenant que vous avez défini dans votreIndex.cshtml
point de vue, mais la Mise en page est rendue par celle-temps, la valeur n'est pas encore fixé.@ViewBag.Title
pas@ViewBag.Info...
et laInfo
objet est défini dans un contrôleur.Vous êtes correct. Je n'ai pas remarqué que vous avez défini ViewBag.Le titre de la vue, et non dans l'action du contrôleur. J'ai mis à jour ma réponse.
Pas de. Il est toujours à se plaindre, même si j'ai ajouté
ViewBag.Title = string.Empty;
dans le contrôleur.C'est très étrange. Je n'arrive pas à reproduire le problème. Si ViewBag.Le titre est définie dans le contrôleur de l'action, vous devriez être en mesure de l'utiliser dans la Mise en page.
De toute façon, il commence à avoir des problème une fois que j'ai ajouter la ligne supplémentaire ViewBag mais ViewBag propriétés sont parfaitement définis dans un contrôleur.
OriginalL'auteur Darin Dimitrov