2016-01-18 17 views

回答

2

我更喜欢使用自定义的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

+0

我在找这样的东西。但是,这似乎并不奏效。它只适用于将方法签名更改为:WelcomeText(此IHtmlHelper htmlHelper)。 但后来我收到一个运行时错误:KeyNotFoundException:给定的键不存在于字典中。 –

+0

我不得不使用htmlHelper.ViewContext.RouteData.Values [“area”]。ToString() –

+0

@CoolBreeze不错,我更新了答案。 :) – hutchonoid

0

如果你正在考虑内嵌if语句,那么你可以做这样的事情:

@((string) ViewContext.RouteData.DataTokens["area"] == "Guest" ? "areaNav_link--selected" : string.Empty) 
+0

我是希望从视图中删除逻辑,以便我可以更容易地测试? –

+0

是的,你应该永远这样做!但在这种情况下,我不明白你的问题。更改您的应用程序的逻辑,以便在视图中不需要if语句。有几个选项,例如,您可以填充模型中的属性,并在视图或几个视图中使用它。 –

+0

我不认为这是可能的?我的应用程序分为多个区域,这个逻辑驻留在我的主布局中? –