我想比较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
我问为什么会这样?
答案 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")