我正在尝试使用jquery ui datepicker为日期选择器创建强类型html帮助器扩展。我创建了一个非强类型的扩展,但是现在我正在尝试强类型化。
这就是我所拥有的:
public static MvcHtmlString DatePicker(this HtmlHelper html, string name, object date)
{
var inputTag = new TagBuilder("input");
inputTag.MergeAttribute("id", name);
inputTag.MergeAttribute("name", name);
inputTag.MergeAttribute("type", "text");
if (date != null)
{
string dateValue = String.Empty;
if ((date is DateTime? ||date is DateTime) && (DateTime)date != DateTime.MinValue)
{
dateValue = ((DateTime)date).ToShortDateString();
}
else if (date is string)
{
dateValue = (string)date;
}
inputTag.MergeAttribute("value", dateValue);
}
return MvcHtmlString.Create(inputTag.ToString());
}
这样可以保持价值。这是我对强类型扩展的所有内容。
public static MvcHtmlString DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression) where TModel : class
{
Func<TModel, TProperty> myFunc = expression.Compile();
var value = myFunc(???);
var inputName = ExpressionHelper.GetExpressionText(expression);
return htmlHelper.DatePicker(inputName, value);
}
如果我为值传递null(value = null),但是在编辑时,日期选择器没有填充值。
如何从模型中获取DatePickerFor扩展方法中的值。 (我知道我可以通过另一个参数传递值,但我不愿意。另外这很有趣)
由于 凯文
- 编辑------我的最终结果---------- 注意:这尚未完全测试,但似乎现在正在运行。
public static MvcHtmlString DatePicker(this HtmlHelper html, string name, object date)
{
var inputTag = new TagBuilder("input");
inputTag.MergeAttribute("id", name);
inputTag.MergeAttribute("name", name);
inputTag.MergeAttribute("type", "text");
inputTag.AddCssClass("jqueryDatePicker");
if (date != null)
{
string dateValue = String.Empty;
if ((date is DateTime? ||date is DateTime) && (DateTime)date != DateTime.MinValue)
{
dateValue = ((DateTime)date).ToShortDateString();
}
else if (date is string)
{
dateValue = (string)date;
}
inputTag.MergeAttribute("value", dateValue);
}
return MvcHtmlString.Create(inputTag.ToString());
}
public static MvcHtmlString DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression) where TModel : class
{
Func<TModel, TProperty> methodCall = expression.Compile();
TProperty value = methodCall(htmlHelper.ViewData.Model);
var inputName = ExpressionHelper.GetExpressionText(expression);
return htmlHelper.DatePicker(inputName, value);
}
这是使用JQuery UI datepicker脚本。什么是“jqueryDatePicker”,为什么它作为一个类添加?我没有为每个页面调用$(#...)。datepicker(),而是添加了这个类,并且有一些javascript可以找到这个类并为你调用.datepicker()。
答案 0 :(得分:0)
以下内容应该有效:
var input = myFunc(htmlHelper.ViewData.Model)