如何连接几个MvcHtmlString实例?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (67)

对如何连接MvcHtmlString实例有一些疑问:

MvcHtmlString类表示不应再次编码的HTML编码的字符串

在使用如下代码时,我是否冒着字符串被HTML编码两次的风险:

var label = Html.LabelFor(model => model.Email);
var textbox = Html.TextBoxFor(model => model.Email);
var validation = Html.ValidationMessageFor(model => model.Email);

var result = MvcHtmlString.Create(
  label.ToString() + textbox.ToString() + validation.ToString());

(注意:这应该进入HtmlHelper扩展方法来减少视图中的代码重复)。

提问于
用户回答回答于

你的代码是正确的。

MSDN中的片段意味着编码视图引擎(如.NET 4中的Aspx视图引擎<%: %>或MVC 3中的Razor视图引擎)不应重新编码该对象的字符串值。

例如:

string s = "<tag>";
var hs = MvcHtmlString.Create(s);

<%: s %>  -- outputs "&lt;tag&gt;"
<%: hs %> -- outputs "<tag>"
用户回答回答于

C#不会让我们重写这里的+运算符。如何使用扩展方法呢

public static MvcHtmlString Concat(this MvcHtmlString first, params MvcHtmlString[] strings)
{
    return MvcHtmlString.Create(first.ToString() + string.Concat(strings.Select(s => s.ToString())));
}

这可能可以优化,但可以运行它。证明不会使用单元测试对字符串进行双重编码应该相当简单。

用法示例:

label.Concat(textbox, validation)   

扫码关注云+社区

领取腾讯云代金券