【发布时间】:2016-01-19 12:11:30
【问题描述】:
我正在尝试为自定义日期格式实现自定义 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)
这是错误:
没有给出与“MyHtmlHelpers.MyDateFor(HtmlHelper, Expression>)”所需的形参“表达式”相对应的参数
我的猜测是 ASP 没有用正确的值替换 this HtmlHelper<TModel> htmlHelper,或者不知道如何替换。即使MyDateFor 方法与 InputExtensions.cs 中定义的TextBoxFor 方法具有相同的签名:
public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
【问题讨论】:
-
只是
@Html.MyDateFor()(不是@MyHtmlHelpers.MyDateFor()) -
您可能还想考虑将
<add namespace="SigmaAdminCore.MyHtmlHelpers" />添加到您的web.config文件中,这样您就不需要视图中的using语句
标签: c# asp.net asp.net-mvc razor