我正在将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, "*");
如何解决这个问题?
答案 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>
}