ASP.NET MVC ViewData if statement
j'utilise ce qui suit dans ma vue pour vérifier si une requête existe comme domain.com/?query=moo
if (!string.IsNullOrEmpty(Request.QueryString["query"])) { my code }
mais il faut maintenant le changer pour qu'il vérifie si la requête ViewData existe au lieu de la chaîne de requête, mais pas tout à fait sûr comment la réécrire. Mon ViewData ressemble à ceci: ViewData["query"]
quelqu'un Peut-il aider? Merci
4 réponses
if (ViewData["query"] != null)
{
// your code
}
si vous devez absolument obtenir une valeur de chaîne que vous pouvez faire:
string query = (ViewData["query"] ?? string.Empty) as string;
if (!string.IsNullOrEmpty(query))
{
// your code
}
<% if(ViewData["query"]!=null)
{
if((!string.IsNullOrEmpty(ViewData["query"].ToString()))
{
//code
}
}
%>
développement de la réponse de Hunter avec un peu de placage d'or...
ViewData
Dictionary
n'est glorieusement pas tapé.
la façon la plus simple de vérifier la présence d'une valeur (premier exemple de Hunter) est:
if (ViewData.ContainsKey("query"))
{
// your code
}
Vous pouvez utiliser un wrapper comme [1]:
public static class ViewDataExtensions
{
public static T ItemCastOrDefault<T>(this ViewDataDictionary that, string key)
{
var value = that[key];
if (value == null)
return default(T);
else
return (T)value;
}
}
qui permet d'exprimer Chasseur deuxième exemple:
String.IsNullOrEmpty(ViewData.ItemCastOrDefault<String>("query"))
mais en général, j'aime envelopper de telles vérifications dans l'intention de révéler les méthodes d'extension nommées, par exemple:
public static class ViewDataQueryExtensions
{
const string Key = "query";
public static bool IncludesQuery(this ViewDataDictionary that)
{
return that.ContainsKey("query");
}
public static string Query(this ViewDataDictionary that)
{
return that.ItemCastOrDefault<string>(Key) ?? string.Empty;
}
}
Qui permet de:
@if(ViewData.IncludesQuery())
{
...
var q = ViewData.Query();
}
un exemple plus élaboré d'application de cette technique:
public static class ViewDataDevExpressExtensions
{
const string Key = "IncludeDexExpressScriptMountainOnPage";
public static bool IndicatesDevExpressScriptsShouldBeIncludedOnThisPage(this ViewDataDictionary that)
{
return that.ItemCastOrDefault<bool>(Key);
}
public static void VerifyActionIncludedDevExpressScripts(this ViewDataDictionary that)
{
if (!that.IndicatesDevExpressScriptsShouldBeIncludedOnThisPage())
throw new InvalidOperationException("Actions relying on this View need to trigger scripts being rendered earlier via this.ActionRequiresDevExpressScripts()");
}
public static void ActionRequiresDevExpressScripts(this Controller that)
{
that.ViewData[Key] = true;
}
}
si vous avez déjà eu à faire ceci dans une ligne - par exemple dans Razor
ViewData["NavigationLocation"] != null && ViewData["NavigationLocation"].ToString() == "What I'm looking for"
j'essaie D'utiliser ViewData pour savoir si oui ou non L'Action courante est celle qui doit être Active dans ma barre de navigation
<li class="@(ViewData["NavigationLocation"] != null && ViewData["NavigationLocation"].ToString() == "Configuration" ? "active" : null)">