【问题标题】:Html.Raw() in ASP.NET MVC Razor viewASP.NET MVC Razor 视图中的 Html.Raw()
【发布时间】:2011-08-11 14:30:13
【问题描述】:
@{int count = 0;}
@foreach (var item in Model.Resources)
{
    @(count <= 3 ? Html.Raw("<div class=\"resource-row\">").ToString() : Html.Raw("")) 
    // some code
    @(count <= 3 ? Html.Raw("</div>").ToString() : Html.Raw("")) 
    @(count++)

}

此代码部分无法编译,出现以下错误

Error   18  Type of conditional expression cannot be determined because there is no implicit conversion between 'string' and 'System.Web.IHtmlString'   d:\Projects\IRC2011_HG\IRC2011\Views\Home\_AllResources.cshtml  21  24  IRC2011

我必须做什么?

【问题讨论】:

  • ToString 将在页面中显示 HTML 字符串。像 "
    ".ToString() 将显示
    而不是添加 div 元素。

标签: asp.net-mvc razor


【解决方案1】:

Html.Raw() 返回IHtmlString,而不是普通的string。因此,您不能将它们写在 : 运算符的相对两侧。删除 .ToString() 调用

@{int count = 0;}
@foreach (var item in Model.Resources)
{
    @(count <= 3 ? Html.Raw("<div class=\"resource-row\">"): Html.Raw("")) 
    // some code
    @(count <= 3 ? Html.Raw("</div>") : Html.Raw("")) 
    @(count++)

}

顺便说一句,返回IHtmlString 是 MVC 识别 html 内容而不对其进行编码的方式。即使没有导致编译器错误,调用ToString()也会破坏Html.Raw()的含义

【讨论】:

    【解决方案2】:

    接受的答案是正确的,但我更喜欢:

    @{int count = 0;} 
    @foreach (var item in Model.Resources) 
    { 
        @Html.Raw(count <= 3 ? "<div class=\"resource-row\">" : "")  
        // some code 
        @Html.Raw(count <= 3 ? "</div>" : "")  
        @(count++)
    } 
    

    我希望这能激励某人,即使我迟到了。

    【讨论】:

    • 我要做的唯一改变是将字符串文字移动到常量中并通过有意义的名称访问它们。
    【解决方案3】:

    你不应该打电话给.ToString()

    正如错误消息明确指出的那样,您正在编写一个条件,其中一半是 IHtmlString,另一半是字符串。
    这没有意义,因为编译器不知道整个表达式应该是什么类型。


    从不调用Html.Raw(...).ToString()的理由。
    Html.Raw返回一个包装原始字符串的HtmlString实例。
    Razor 页面输出知道不要转义 HtmlString 实例。

    然而,调用HtmlString.ToString() 只是再次返回原来的string 值;它什么也做不了。

    【讨论】:

    • ToString 将在页面中显示 HTML 字符串。像 "
      ".ToString() 将显示
      而不是添加 div 元素。
    • 我知道。我只是解释了原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 2011-03-11
    • 2014-10-26
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多