考虑下面的代码声明:最好的办法去除,如果内部视图在asp.net MVC6
@{
if ((string) ViewContext.RouteData.DataTokens["area"] == "Guest"){
<text>areaNav_link--selected</text>
}
}
我怎么会去删除,如果声明?
考虑下面的代码声明:最好的办法去除,如果内部视图在asp.net MVC6
@{
if ((string) ViewContext.RouteData.DataTokens["area"] == "Guest"){
<text>areaNav_link--selected</text>
}
}
我怎么会去删除,如果声明?
我更喜欢使用自定义的HTML辅助去除逻辑。
举个例子,你可以按如下方式调用它:
@Html.WelcomeText()
逻辑可以移动到帮助如下:
public static MvcHtmlString WelcomeText(this HtmlHelper htmlHelper)
{
var text = string.Empty;
var areaName = ViewContext.RouteData.Values["area"].ToString();
if (areaName == "Guest")
{
text = "Hello Guest";
}
return new MvcHtmlString(text);
}
这种方式,你可以重新使用它在整个网站只有一行剃须刀代码。
另一种方法是创建一个TagHelper。
如果你正在考虑内嵌if语句,那么你可以做这样的事情:
@((string) ViewContext.RouteData.DataTokens["area"] == "Guest" ? "areaNav_link--selected" : string.Empty)
我是希望从视图中删除逻辑,以便我可以更容易地测试? –
是的,你应该永远这样做!但在这种情况下,我不明白你的问题。更改您的应用程序的逻辑,以便在视图中不需要if语句。有几个选项,例如,您可以填充模型中的属性,并在视图或几个视图中使用它。 –
我不认为这是可能的?我的应用程序分为多个区域,这个逻辑驻留在我的主布局中? –
我在找这样的东西。但是,这似乎并不奏效。它只适用于将方法签名更改为:WelcomeText(此IHtmlHelper htmlHelper)。 但后来我收到一个运行时错误:KeyNotFoundException:给定的键不存在于字典中。 –
我不得不使用htmlHelper.ViewContext.RouteData.Values [“area”]。ToString() –
@CoolBreeze不错,我更新了答案。 :) – hutchonoid