运算符'+'不能应用于MvcHtmlString类型的操作数

时间:2010-08-31 05:15:37

标签: c# asp.net-mvc-2

我正在将ASP.NET MVC应用程序转换为ASP.NET MVC 2 4.0,并收到此错误:

  

运算符'+'不能应用于'System.Web.Mvc.MvcHtmlString'和'System.Web.Mvc.MvcHtmlString'类型的操作数

HTML = Html.InputExtensions.TextBox(helper, name, value, htmlAttributes) 
       + Html.ValidationExtensions.ValidationMessage(helper, name, "*");

如何解决这个问题?

6 个答案:

答案 0 :(得分:5)

您无法连接MvcHtmlString的实例。您需要将它们转换为普通字符串(通过.ToString())或以其他方式进行。

您也可以编写扩展方法,请参阅此答案以获取示例:How to concatenate several MvcHtmlString instances

答案 1 :(得分:4)

我个人使用一个非常苗条的实用方法,它利用了字符串类中现有的Concat()方法:

public static MvcHtmlString Concat(params object[] args)
{
    return new MvcHtmlString(string.Concat(args));
}

答案 2 :(得分:1)

@Anders方法作为扩展方法。关于这一点的好处是你可以将几个MvcHtmlStrings与其他值(例如普通字符串,整数等)一起追加,因为系统会自动在每个对象上调用ToString。

    /// <summary>
    /// Concatenates MvcHtmlStrings together
    /// </summary>
    public static MvcHtmlString Append(this MvcHtmlString first, params object[] args) {
        return new MvcHtmlString(string.Concat(args));
    }

示例电话:

MvcHtmlString result = new MvcHtmlString("");
MvcHtmlString div = new MvcHtmlString("<div>");
MvcHtmlString closediv = new MvcHtmlString("</div>");

result = result.Append(div, "bob the fish", closediv);
result = result.Append(div, "bob the fish", closediv);

如果我们可以重载operator +

,那么很多更好

答案 3 :(得分:0)

这是我的方式:

        // MvcTools.ExtensionMethods.MvcHtmlStringExtensions.Concat
        public static MvcHtmlString Concat(params MvcHtmlString[] strings)
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();

            foreach (MvcHtmlString thisMvcHtmlString in strings)
            {
                if (thisMvcHtmlString != null)
                    sb.Append(thisMvcHtmlString.ToString());
            } // Next thisMvcHtmlString

            MvcHtmlString res = MvcHtmlString.Create(sb.ToString());
            sb.Clear();
            sb = null;

            return res;
        } // End Function Concat

答案 4 :(得分:0)

        public static MvcHtmlString Concat(params MvcHtmlString[] value)
        {
            StringBuilder sb = new StringBuilder();
            foreach (MvcHtmlString v in value) if (v != null) sb.Append(v.ToString());
            return MvcHtmlString.Create(sb.ToString());
        }

答案 5 :(得分:0)

以@mike nelson的例子为例,这是最适合我的解决方案:

无需额外的辅助方法。在您的剃刀文件中执行以下操作:

@foreach (var item in Model)
{
    MvcHtmlString num = new MvcHtmlString(item.Number + "-" + item.SubNumber);
    <p>@num</p>
}