【问题标题】:.NET CORE MvcHtmlString(TextboxFor, LabelFor).ToString() Error.NET CORE MvcHtmlString(TextboxFor, LabelFor).ToString() 错误
【发布时间】:2019-04-24 03:08:13
【问题描述】:

您好,我必须将 MvcHtmlString 转换为字符串。我在这段代码之前使用过。(.net 框架)

TagBuilder div = new TagBuilder("div");
div.MergeAttribute("class", "form-group");
var label = helper.LabelFor(expression, new { @class = "control-label col-lg-1" });
div.InnerHtml += label.ToString();

现在我正在开发 .net 核心,但在

处出现错误
div.InnerHtml += label.ToString();

Error Image

返回代表当前对象的字符串。 对类型“HtmlString”的引用声称它是在“System.Web”中定义的,但找不到。 模块'System.Web, Version=4.0.0.0, Culture=neutral, PublicyToken=b03f5f7f11d50a3a 应该被引用

请帮助我。我必须使用这种方法或替代方法。我正在尝试构建一个表单。

【问题讨论】:

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


    【解决方案1】:

    你试过了吗?:

    div.InnerHtml += label.ToHtmlString(); 
    

    【讨论】:

    • 我的visualstudio中没有ToHtmlString()这样的方法>。
    • @HaroMaro 你应该实现System.Web.HtmlString
    • 我也在 another forum HtmlString str = new HtmlString(label.value); 上找到了这个,也试试看,如果这成功了,请告诉我。
    • 感谢您的关注,但不要使用这些。标签只有 .GetType、.Equals .GetHashCode 方法 :(
    【解决方案2】:

    下面这行导致错误,因为TagBuilder.InnerHtml 是只读属性,您不能使用+= 运算符来分配HTML 字符串:

    div.InnerHtml += label.ToString();
    

    您应该对现有的LabelFor 助手使用AppendHtml()

    div.InnerHtml.AppendHtml(label);
    

    请注意,.NET Core MVC 不使用 System.Web 命名空间,而是使用 Microsoft.AspNetCore 父命名空间。您应该尝试使用IHtmlContent 来构建您自己的自定义助手而不是MvcHtmlString,按照以下步骤操作:

    1) 包括下面提供的所有using 语句以启用IHtmlContentIHtmlHelper 实例。

    using Microsoft.AspNetCore.Html;
    using Microsoft.AspNetCore.Mvc.Rendering;
    using Microsoft.AspNetCore.Mvc.ViewFeatures;
    

    2) 使用Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper 作为参数而不是System.Web.Mvc.HtmlHelper 创建您的自定义助手,如下例所示:

    public static IHtmlContent CustomLabelFor<TModel, TProperty>(this IHtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes)
    {
        string result;
    
        TagBuilder div = new TagBuilder("div");
        div.MergeAttribute("class", "form-group");
        var label = helper.LabelFor(expression, new { @class = "control-label col-lg-1" });
        div.InnerHtml.AppendHtml(label);
    
        using (var sw = new System.IO.StringWriter())
        {
            div.WriteTo(sw, System.Text.Encodings.Web.HtmlEncoder.Default);
            result = sw.ToString();
        }
    
        return new HtmlString(result);
    }
    

    注意:此示例帮助程序已在 VS 2017、.NET Core 2.1 中测试。

    相关问题:

    Create Custom HTML Helper in ASP.Net Core

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 2020-08-22
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      相关资源
      最近更新 更多