在Html.Raw中逃脱@

时间:2014-09-25 08:24:41

标签: asp.net-mvc razor escaping

我需要从服务器端解析一些HTML。所以我已经使用了

@Html.Raw(MyFunction("key"))

MyFunction返回以下值

<!--some HTML -->
<li>
    Please click the link here to see the <a href='@(MySiteSettings.DocumentURL + "Documents/MyPDFFile.pdf")' target="_blank">Changes to Your Screens</a>.
</li>
<!--some other HTML -->

我希望将锚标记呈现为,

<a href='http://mydocumenturl/Documents/MyPDFFile.pdf' target="_blank">Changes to Your Screens</a>

但它的呈现方式如下所示。

<a href='http://mycurrenturl/@(MySiteSettings.DocumentURL + "Documents/MyPDFFile.pdf")' target="_blank">Changes to Your Screens</a>

我已经尝试了

@@(MySiteSettings...

@:(MySiteSettings...

@:@@(MySiteSettings ...

逃避&#39; @&#39;在Html.Raw,但没有运气。

3 个答案:

答案 0 :(得分:1)

@Html.Raw正在执行它的设计目标:此方法使用IHtmlString类包装HTML标记,该类呈现未编码的HTML 。我现在没有视觉工作室,所以请将此作为样本并相应更新

根据您的代码,我建议您使用PartialViews

您当前视图中的某处:

@Html.RenderAction("PartialList");

PartialList ActionResult

[OutputCache(Duration = 60, VaryByParam = "None")]
public ActionResult PartialList()
{
    ...
    //form up your dynamic <a> here...
    return PartialView(<pass in your string here>);
    ...
}

PartialView

@Html.Raw(Model)
<li>
    Please click the link here to see the <a href='@Model)' target="_blank">Changes to Your Screens</a>.
</li>

然后你可能会问,为什么你要经历所有这些麻烦?看看this 在那个答案中没有提到的是你可以轻松利用的OutputCache。

答案 1 :(得分:1)

像这样定义你的功能:

@helper MyFunction(string key)
{
    // do your code here, also with @expressions
    <li>
        Please click the link here to see the <a href='@(MySiteSettings.DocumentURL + "Documents/MyPDFFile.pdf")' target="_blank">Changes to Your Screens</a>.
    </li>
}

答案 2 :(得分:0)

我提出了这个解决方案。

@Html.Raw(string.Format(MyFunction("key"), MySiteSettings.DocumentURL + "Documents/MyPDFFile.pdf"))

我替换了我的数据库中的内容,如上所述。

<!--some HTML -->
<li>
    Please click the link here to see the <a href='{0}' target="_blank">Changes to Your Screens</a>.
</li>
<!--some other HTML -->