Ampliando la respuesta de Hunter con un poco de Dorar ...
El ViewData
Dictionary
es gloriosamente sin tipo.
La forma más sencilla de comprobar si hay presencia de un valor (primer ejemplo de Hunter) es:
if (ViewData.ContainsKey("query"))
{
// your code
}
Se puede utilizar un envoltorio como [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;
}
}
el cual le permite a uno expresar El segundo ejemplo de Hunter como:
String.IsNullOrEmpty(ViewData.ItemCastOrDefault<String>("query"))
Pero, en general, me gusta envolver dichos cheques en la intención de revelar el nombre d métodos de extensión, por ejemplo:
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;
}
}
Que permite:
@if(ViewData.IncludesQuery())
{
...
var q = ViewData.Query();
}
Un ejemplo más elaborado de la aplicación de esta técnica:
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;
}
}
Parece que funciona perfectamente con su respuesta original :) – Cameron
Sugiero usar un modelo real en lugar de apoyarse en 'as' (y [ampliar esta respuesta con una extensión que hace esto] (http: // stackoverflow. com/a/35131514/11635)) –