比较2个变量类型MvcHtmlString始终为false

时间:2013-09-11 08:46:35

标签: asp.net-mvc c#-4.0 razor

我想比较2变量(类型为mvcHtmlString),但响应始终为false ...

@{ //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

我问为什么会这样?

2 个答案:

答案 0 :(得分:1)

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

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

if (ViewBag.BrowserName == "ie")
{ ... }

答案 1 :(得分: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")