Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NETMVC-Won';不认识';本HtmlHelper';_C#_Asp.net_Asp.net Mvc_Razor - Fatal编程技术网

C# ASP.NETMVC-Won';不认识';本HtmlHelper';

C# ASP.NETMVC-Won';不认识';本HtmlHelper';,c#,asp.net,asp.net-mvc,razor,C#,Asp.net,Asp.net Mvc,Razor,我正在尝试为自定义日期格式实现自定义HtmlHelper。 (因为TextBoxFor忽略了日期格式属性,而EditorFor忽略了类,但这不是问题所在) 以下是定制的HtmlHelper: namespace SigmaAdminCore.MyHtmlHelpers { public static class MyHtmlHelpers { public static MvcHtmlString MyDateFor<TModel, TProperty>

我正在尝试为自定义日期格式实现自定义HtmlHelper。
(因为
TextBoxFor
忽略了日期格式属性,而
EditorFor
忽略了类,但这不是问题所在)
以下是定制的HtmlHelper:

namespace SigmaAdminCore.MyHtmlHelpers
{
    public static class MyHtmlHelpers
    {
        public static MvcHtmlString MyDateFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
        {
            var mvcHtmlString = System.Web.Mvc.Html.InputExtensions.TextBoxFor(htmlHelper, expression, new { @class = "text-box single-line date-picker" });
            var xDoc = XDocument.Parse(mvcHtmlString.ToHtmlString());
            var xElement = xDoc.Element("input");
            if (xElement != null)
            {
                var valueAttribute = xElement.Attribute("value");
                if (valueAttribute != null)
                {
                    valueAttribute.Value = DateTime.Parse(valueAttribute.Value).ToShortDateString();
                    if (valueAttribute.Value == "1/1/0001")
                        valueAttribute.Value = string.Empty;
                }
            }
            return new MvcHtmlString(xDoc.ToString());
        }
    }
}
下面是错误:

没有给出与“MyHtmlHelpers.MyDateFor(HtmlHelper,expression>)”的必需形式参数“expression”相对应的参数

我的猜测是ASP没有用正确的值替换
这个HtmlHelper HtmlHelper
,或者不知道如何替换。即使
MyDateFor
方法与InputExtensions.cs中定义的
TextBoxFor
方法具有相同的签名:

public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
public static MvcHtmlString TextBoxFor(此HtmlHelper HtmlHelper,表达式)
行:

@MyHtmlHelpers.MyDateFor(model => model.ExpirationDate)
应该是:

@Html.MyDateFor(model => model.ExpirationDate)
您已经扩展了
此HtmlHelper


基本上,行
这个HtmlHelper HtmlHelper
使其成为
HtmlHelper
的扩展方法
“引擎盖下”cshtml文件的类型是
WebViewPage
,上面有这一行:

public HtmlHelper<TModel> Html { get; set; }
publicHTMLHelperHTML{get;set;}

它通过
@html

使您的扩展方法可用,它必须是
@html.MyDateFor(model=>model.ExpirationDate)
,而不是
@myhtmlhelp.MyDateFor(model=>model.ExpirationDate)

它只是
@html.MyDateFor()
(不是
@myhtmlhelp.MyDateFor()
)您可能还想考虑将<代码> <代码>添加到代码< > Web.CONFIG文件中,这样您就不需要在代码中使用<代码> >在视图中感谢您的解决方案。你能解释一下我的类是如何在没有明确指定的情况下扩展HtmlHelper的吗?另外,我还认为只能从我创建的类中访问
MyDateFor
方法,如何从
@Html中访问呢。
public HtmlHelper<TModel> Html { get; set; }