Оператор '+' нельзя применить к операндам типа MvcHtmlString - PullRequest
6 голосов
/ 31 августа 2010

Я конвертирую приложение 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 ]

5 голосов
/ 31 августа 2010

Вы не можете объединить экземпляры MvcHtmlString.Вам нужно будет либо преобразовать их в обычные строки (через .ToString()), либо сделать это другим способом.

Вы также можете написать метод расширения, см. Этот ответ для примера: Как объединитьнесколько экземпляров MvcHtmlString

4 голосов
/ 07 декабря 2011

Лично я использую очень тонкий метод утилит, который использует преимущества существующего метода Concat () в классе строки:

public static MvcHtmlString Concat(params object[] args)
{
    return new MvcHtmlString(string.Concat(args));
}
1 голос
/ 19 августа 2013

@ Метод Андерса как метод расширения. Приятно то, что вы можете добавить несколько 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);

Было бы намного лучше, если бы мы могли перегрузить оператор +

0 голосов
/ 10 февраля 2017

Отрабатывая пример @mike nelson, для меня это было лучшим решением:

Нет необходимости в дополнительных вспомогательных методах. В вашем файле бритвы сделайте что-то вроде:

@foreach (var item in Model)
{
    MvcHtmlString num = new MvcHtmlString(item.Number + "-" + item.SubNumber);
    <p>@num</p>
}
0 голосов
/ 14 мая 2013
        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());
        }
0 голосов
/ 18 апреля 2013

Вот мой путь:

        // 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...