2

我想比较 2 个变量(键入 mvcHtmlString),但响应总是错误的......

@{ //Load the good css file

    if (ViewBag.BrowserName == MvcHtmlString.Create("ie"))
    {
        if (ViewBag.BrowserVersion > 9)
        {
            @Styles.Render("~/Content/ie10-css")
        }
        else
        {
            @Styles.Render("~/Content/ie7-css")
        }
    }
    else if (ViewBag.BrowserName == MvcHtmlString.Create("safari")) //and ipad
    {
        @Styles.Render("~/Content/safari/css")
    }
    else  //if (ViewBag.BrowserName == "firefox" || ViewBag.BrowserName == "chrome")
    {
        @Styles.Render("~/Content/default/css")
    }

}

我的控制台显示:

MvcHtmlString.Create("safari")                 -> {safari}
ViewBag.BrowserName                            -> {safari}
ViewBag.BrowserName == MvcHtmlString("safari") -> false

请问为什么是假的?

4

2 回答 2

1

MvcHtmlString.Create不创建字符串实例。输出是相同的,因为它返回您在ToString()实现中使用的字符串。由于 MvcHtmlString 没有重载==运算符,它们永远不可能相等。

您可以使用常规字符串进行比较:

if (ViewBag.BrowserName == "ie")
{ ... }
于 2013-09-11T08:55:37.437 回答
0
public String GetBrowserName()
{
    ViewBag.logged = false;
    return (Request.Browser.Browser.ToLowerInvariant());
}

因此,Html.Action 返回一个 MvcHtmlString (我不知道为什么),但可以直接在 cshtml 页面中将其强制为字符串:

@if (ViewBag.BrowserName == null)
{
    ViewBag.BrowserName = Html.Action("GetBrowserName", "Services").ToString();
}

现在比较 2 个字符串:

if (ViewBag.BrowserName == "safari")
于 2013-09-11T09:48:09.360 回答