Asp.net mvc 是否存在生成<;的现有MVC HtmlHelper like@Html.Label;span>;?

Asp.net mvc 是否存在生成<;的现有MVC HtmlHelper like@Html.Label;span>;?,asp.net-mvc,razor,Asp.net Mvc,Razor,我想知道我是否需要创建一个定制的HtmlHelper来简单地将一个值显示为跨度 目前我正在使用: @model string @{ var htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(ViewData["htmlAttributes"]); } <span class="@htmlAttributes["class"]">@Model</string> 还没有,但是您可以使用任意标记组合

我想知道我是否需要创建一个定制的HtmlHelper来简单地将一个值显示为跨度

目前我正在使用:

@model string
@{
    var htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(ViewData["htmlAttributes"]);
}
<span class="@htmlAttributes["class"]">@Model</string>

还没有,但是您可以使用任意标记组合扩展Helpers对象

添加名为HtmlHelperExtensions.cs的类文件,代码如下:

using System;
using System.Web;
using System.Web.Mvc;

namespace WebApplication1
{
    public static class HtmlHelperExtensions
    {
        public static IHtmlString Span(this HtmlHelper Helper, string Content, string Class = "")
        {
            string classstring = Class == "" ? "" : string.Format(" class=\"{0}\" ", Class);
            string htmlString = String.Format("<span{1}>{0}</span>", Content, classstring);
            return new HtmlString(htmlString);
        }
    }
}

还没有,但是您可以使用任意标记组合扩展Helpers对象

添加名为HtmlHelperExtensions.cs的类文件,代码如下:

using System;
using System.Web;
using System.Web.Mvc;

namespace WebApplication1
{
    public static class HtmlHelperExtensions
    {
        public static IHtmlString Span(this HtmlHelper Helper, string Content, string Class = "")
        {
            string classstring = Class == "" ? "" : string.Format(" class=\"{0}\" ", Class);
            string htmlString = String.Format("<span{1}>{0}</span>", Content, classstring);
            return new HtmlString(htmlString);
        }
    }
}

我知道这篇文章已经很老了,但我将发布一个非常基本的@Html.Span和@Html.Span版本,供帮助者使用。我将发布.netcore和MVC5。我希望这能帮助人们摆脱困境

mvc5的实现

using System;
using System.Linq.Expressions;
using System.Web.Mvc;

public static class HMTLHelperExtensions
{
    public static MvcHtmlString Span(this HtmlHelper Helper, string Name, string Content, object HtmlAttributes)
    {
        var htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(HtmlAttributes);

        TagBuilder tag = new TagBuilder("Span");
        tag.MergeAttribute("name", TagBuilder.CreateSanitizedId(Name));
        tag.GenerateId(Name);
        tag.InnerHtml = Content;
        foreach(var i in htmlAttributes )
        {
            tag.MergeAttribute(i.Key, i.Value.ToString());
        }
        return MvcHtmlString.Create(tag.ToString());
    }

    public static MvcHtmlString Span(this HtmlHelper Helper, string Name, string Content)
    {
        TagBuilder tag = new TagBuilder("Span");
        tag.MergeAttribute("name", TagBuilder.CreateSanitizedId(Name));
        tag.GenerateId(Name);
        tag.InnerHtml = Content;
        return MvcHtmlString.Create(tag.ToString());
    }

    public static MvcHtmlString SpanFor<TModel, TProperty>(this HtmlHelper<TModel> Helper, Expression<Func<TModel, TProperty>> expression, string Content, object HtmlAttributes)
    {
        var name = ExpressionHelper.GetExpressionText(expression);
        var metaData = ModelMetadata.FromLambdaExpression(expression, Helper.ViewData);
        return Span(Helper, name, metaData.Model as string, HtmlAttributes);
    }

    public static MvcHtmlString SpanFor<TModel, TProperty>(this HtmlHelper<TModel> Helper, Expression<Func<TModel, TProperty>> expression, string Content)
    {
        var name = ExpressionHelper.GetExpressionText(expression);
        var metaData = ModelMetadata.FromLambdaExpression(expression, Helper.ViewData);
        return Span(Helper, name, metaData.Model as string);
    }
}

我知道这篇文章已经很老了,但我将发布一个非常基本的@Html.Span和@Html.Span版本,供帮助者使用。我将发布.netcore和MVC5。我希望这能帮助人们摆脱困境

mvc5的实现

using System;
using System.Linq.Expressions;
using System.Web.Mvc;

public static class HMTLHelperExtensions
{
    public static MvcHtmlString Span(this HtmlHelper Helper, string Name, string Content, object HtmlAttributes)
    {
        var htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(HtmlAttributes);

        TagBuilder tag = new TagBuilder("Span");
        tag.MergeAttribute("name", TagBuilder.CreateSanitizedId(Name));
        tag.GenerateId(Name);
        tag.InnerHtml = Content;
        foreach(var i in htmlAttributes )
        {
            tag.MergeAttribute(i.Key, i.Value.ToString());
        }
        return MvcHtmlString.Create(tag.ToString());
    }

    public static MvcHtmlString Span(this HtmlHelper Helper, string Name, string Content)
    {
        TagBuilder tag = new TagBuilder("Span");
        tag.MergeAttribute("name", TagBuilder.CreateSanitizedId(Name));
        tag.GenerateId(Name);
        tag.InnerHtml = Content;
        return MvcHtmlString.Create(tag.ToString());
    }

    public static MvcHtmlString SpanFor<TModel, TProperty>(this HtmlHelper<TModel> Helper, Expression<Func<TModel, TProperty>> expression, string Content, object HtmlAttributes)
    {
        var name = ExpressionHelper.GetExpressionText(expression);
        var metaData = ModelMetadata.FromLambdaExpression(expression, Helper.ViewData);
        return Span(Helper, name, metaData.Model as string, HtmlAttributes);
    }

    public static MvcHtmlString SpanFor<TModel, TProperty>(this HtmlHelper<TModel> Helper, Expression<Func<TModel, TProperty>> expression, string Content)
    {
        var name = ExpressionHelper.GetExpressionText(expression);
        var metaData = ModelMetadata.FromLambdaExpression(expression, Helper.ViewData);
        return Span(Helper, name, metaData.Model as string);
    }
}

为什么不直接做
@Model.Value
。为span创建一个助手似乎有些过分。我很好奇,为什么您认为需要为span元素创建一个HtmlHelper?您将从中获得什么好处?我编辑了我的问题,以显示我当前使用的内容与我希望使用的内容相比。为什么不直接执行
@Model.Value
。为span创建一个助手似乎有些过分。我很好奇,为什么您认为需要为span元素创建一个HtmlHelper?您将从中获得什么好处?我编辑了我的问题,以显示我当前使用的内容,与我希望使用的内容相比。感谢您不仅仅是说“还没有”。感谢您不仅仅是说“还没有”
using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Mvc.ViewFeatures.Internal;
using System;
using System.Linq.Expressions;

public static class HtmlHelperExtensions
{
    public static IHtmlContent Span(this IHtmlHelper htmlHelper, string name, string Content, object htmlAttributes)
    {
        TagBuilder tag = new TagBuilder("Span");
        tag.MergeAttribute("name", TagBuilder.CreateSanitizedId(name,""));
        tag.GenerateId(name, "");
        tag.InnerHtml.Append(Content);
        var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
        foreach (var i in attributes)
        {
            tag.MergeAttribute(i.Key, i.Value.ToString());
        }
        return tag;
    }

    public static IHtmlContent Span(this IHtmlHelper htmlHelper, string name, string Content)
    {
        TagBuilder tag = new TagBuilder("Span");
        tag.MergeAttribute("name", TagBuilder.CreateSanitizedId(name, ""));
        tag.GenerateId(name, "");
        tag.InnerHtml.Append(Content);
        return tag;
    }

    public static IHtmlContent SpanFor<TModel, TProperty>(this IHtmlHelper<TModel> htmlHelper, Expression<Func<TModel,TProperty>> expression, string content, object htmlAttributes)
    {
        var modelExplorer = ExpressionMetadataProvider.FromLambdaExpression(expression, htmlHelper.ViewData, htmlHelper.MetadataProvider);
        var name = ExpressionHelper.GetExpressionText(expression);
        var metaData = modelExplorer.Metadata;
        return Span(htmlHelper, name, modelExplorer.Model as string, htmlAttributes);
    }

    public static IHtmlContent SpanFor<TModel, TProperty>(this IHtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string content)
    {
        var modelExplorer = ExpressionMetadataProvider.FromLambdaExpression(expression, htmlHelper.ViewData, htmlHelper.MetadataProvider);
        var name = ExpressionHelper.GetExpressionText(expression);
        var metaData = modelExplorer.Metadata;
        return Span(htmlHelper, name, modelExplorer.Model as string);
    }
}
@Html.Span("Test", "Testing Content", new { @class = "test-class", style = "text-align:right" }
@Html.SpanFor(x=>x.ModelProperty, Model.ModelProperty, new { @class = "test-class", style = "text-align:right" }