C# 从ASP.NET MVC扩展函数返回HTML

C# 从ASP.NET MVC扩展函数返回HTML,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个ASP.NETMVC应用程序。我的应用程序正在我的视图中显示模型中的值,如下所示: public static MvcHtmlString ToMeasure<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string measurement = "sf") { if (measurement == "

我有一个ASP.NETMVC应用程序。我的应用程序正在我的视图中显示模型中的值,如下所示:

public static MvcHtmlString ToMeasure<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string measurement = "sf")
{
  if (measurement == "m2")
    measurement = "m<sup>2</sup>";
  return System.Web.Mvc.Html.ValueExtensions.ValueFor(html, expression, "{0:N0} " + measurement);
}
publicstaticmvchtmlstring-ToMeasure(此htmlhelp-html,Expression-Expression,stringmeasurement=“sf”)
{
如果(测量值=“m2”)
测量=“m2”;
return System.Web.Mvc.Html.ValueExtensions.ValueFor(Html,表达式“{0:N0}”+度量);
}
有时,
测量值
表示平方英尺。其他时间,它将代表平方米。当它是平方米时,我想使用HTML
sup
标记。不幸的是,现在它呈现为文本
m2
,而不是实际的上标。我如何告诉MVC使用上标而不是文字


谢谢

您需要构建要返回的html元素

public static MvcHtmlString ToMeasure<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, string measurement = "sf")
{
    StringBuilder html = new StringBuilder();
    html.Append(ValueExtensions.ValueFor(helper, expression, "{0:N0}"));

    // or html.Append(helper.ValueFor(expression, "{0:N0}"));

    if (measurement == "m2")
    {
        html.Append("m");
        TagBuilder sup = new TagBuilder("sup");
        sup.InnerHtml = "2";
        html.Append(sup.ToString());
    }
    else
    {
        html.Append(measurement);
    }
    // Optionally you might want to wrap it all in another element?
    TagBuilder span = new TagBuilder("span");
    span.InnerHtml = html.ToString();

    return MvcHtmlString.Create(span.ToString());
}
假设
yourProperty
的值为100,它将生成以下输出

<span>100m<sup>2</sup></span>
100m2

@KrishnaDhungana你能举个例子吗?我以前从来没有这样做过。那么从风景上看,你怎么称呼它呢?目前,我有
@Html.ToMeasure(model=>model.Size)
及其呈现为
System.Web.Mvc.HtmlHelper
1[MyApp.MyProject.Models.MyViewModel]`我刚刚使用
@Html.ToMeasure(m=>m.myProperty,“m2”)对其进行了测试并且工作正常。您是否已将相关部件包括在视图中?你确定你准确地复制了代码吗?
<span>100m<sup>2</sup></span>