首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何连接多个MvcHtmlString实例

如何连接多个MvcHtmlString实例
EN

Stack Overflow用户
提问于 2010-08-12 00:49:25
回答 4查看 29.1K关注 0票数 69

我对如何连接MvcHtmlString实例有一些疑问,因为在MSDN中可以找到以下信息:

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扩展方法,以减少视图中的代码重复)。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-12 02:22:01

您的代码是正确的。

来自MSDN的代码片段意味着,编码视图引擎(例如使用<%: %>时的.NET 4中的Aspx视图引擎或MVC3中的Razor视图引擎)不应该对对象的字符串值进行重新编码。

举个例子:

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

<%: s %>  -- outputs "&lt;tag&gt;"
<%: hs %> -- outputs "<tag>"
票数 28
EN

Stack Overflow用户

发布于 2010-08-12 11:52:51

太糟糕了,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)   

现在我为我的博客添加了一个无耻的插件:Use TagBuilder or HtmlTags to clean up your HTML

票数 60
EN

Stack Overflow用户

发布于 2010-12-06 01:06:48

我选择了这种方法:

    private static MvcHtmlString Concat(params MvcHtmlString[] items)
    {
        var sb = new StringBuilder();
        foreach (var item in items.Where(i => i != null))
            sb.Append(item.ToHtmlString());
        return MvcHtmlString.Create(sb.ToString());
    }

它只是一个实用方法,我在HtmlHelper的扩展方法的类中使用它。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3460762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档