【问题标题】:What is the equivalent of System.Web.Mvc.Html.InputExtensions in ASP.NET 5?ASP.NET 5 中 System.Web.Mvc.Html.InputExtensions 的等价物是什么?
【发布时间】:2015-10-27 07:44:43
【问题描述】:

在 ASP.NET 4 中使用的 System.Web.Mvc.Html.InputExtensions 的 ASP.NET 5 等效项是什么?

请看下面的例子:

public static class CustomHelpers
{
    // Submit Button Helper
    public static MvcHtmlString SubmitButton(this HtmlHelper helper, string buttonText)
    {
        string str = "<input type=\"submit\" value=\"" + buttonText + "\" />";
        return new MvcHtmlString(str);
    }

    // Readonly Strongly-Typed TextBox Helper
    public static MvcHtmlString TextBoxFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression, bool isReadonly)
    {
        MvcHtmlString html = default(MvcHtmlString);

        if (isReadonly)
        {
            html = System.Web.Mvc.Html.InputExtensions.TextBoxFor(htmlHelper,
                expression, new { @class = "readOnly",
                @readonly = "read-only" });
        }
        else
        {
            html = System.Web.Mvc.Html.InputExtensions.TextBoxFor(htmlHelper, expression);
        }
        return html;
    }
}

【问题讨论】:

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


    【解决方案1】:

    对于 ASP.NET 4 代码:

        MvcHtmlString html = 
            System.Web.Mvc.Html.InputExtensions.TextBoxFor(
                htmlHelper, expression);
    

    等效的 ASP.NET 5 是:

    Microsoft.AspNet.Mvc.Rendering.HtmlString html = 
         (Microsoft.AspNet.Mvc.Rendering.HtmlString)    
             Microsoft.AspNet.Mvc.Rendering.HtmlHelperInputExtensions.TextBoxFor(
                 htmlHelper, expression);
    

    或包含在您的页面中的命名空间

    @Microsoft.AspNet.Mvc.Rendering;
    

    上面写着:

    HtmlString html = (HtmlString)HtmlHelperInputExtensions.TextBoxFor(htmlHelper,expression);
    

    请注意,它的返回类型是接口 IHtmlContent,而不是 ASP.NET 4 中的 MvcHtmlString

    MvcHtmlString 在 ASP.NET 5 中已替换为 HtmlString

    由于返回了 HtmlString 的接口 IHtmlContent 而不是 HtmlString 本身,因此您必须将返回值强制转换为 HtmlString

    但是您想在 ASP.NET 5 中将其用作扩展方法 所以您应该将您的方法返回类型更改为IHtmlContent,并将您的代码更改为:

     IHtmlContent html = HtmlHelperInputExtensions.TextBoxFor(htmlHelper,
                                              expression);
     return html;
    

    源码可以在here找到。

    【讨论】:

    • 该方法是一个扩展方法,所以你可以这样调用它:htmlHelper.TextBoxFor(expression)。然后你必须包含 Microsoft.AspNet.Mvc.Rendering 命名空间。
    猜你喜欢
    • 2015-02-24
    • 2019-03-09
    • 1970-01-01
    • 2012-03-26
    • 2017-07-24
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多