我尝试为自定义日期格式实现自定义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());
}
}
}
在我看来,我有:
@using SigmaAdminCore.MyHtmlHelpers
...
@MyHtmlHelpers.MyDateFor(model => model.ExpirationDate)
这就是错误:
没有任何论据符合所要求的形式参数&#39;表达式&#39; &#39; MyHtmlHelpers.MyDateFor(HtmlHelper,Expression&gt;)&#39;
我的猜测是ASP并没有用适当的价值取代this HtmlHelper<TModel> htmlHelper
或者不知道如何。尽管MyDateFor
方法与InputExtensions.cs中定义的TextBoxFor
方法具有相同的签名:
public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
答案 0 :(得分:2)
该行:
@MyHtmlHelpers.MyDateFor(model => model.ExpirationDate)
应该是:
@Html.MyDateFor(model => model.ExpirationDate)
您已经延长this HtmlHelper<TModel>
。
基本上,this HtmlHelper<TModel> htmlHelper
行使其成为HtmlHelper<TModel>
的扩展方法
&#34;引擎盖下&#34; cshtml文件的类型是WebViewPage<TModel>
,并且上面有这一行:
public HtmlHelper<TModel> Html { get; set; }
这使您的扩展程序可以@html
答案 1 :(得分:1)
必须是@Html.MyDateFor(model => model.ExpirationDate)
而不是@MyHtmlHelpers.MyDateFor(model => model.ExpirationDate)