C# ASP.NETMVC-Won';不认识';本HtmlHelper';
我正在尝试为自定义日期格式实现自定义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>
(因为
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; }