1
我想创建一个强类型的html助手扩展为日期选择器使用jquery ui datepicker。我创建了一个不强类型的扩展,它可以工作,但现在我试图创建它强类型。帮助在Asp.net MVC 2中创建强类型的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值(值= NULL),但编辑时,日期选择器不与值填充。
如何从模型中获取DatePickerFor扩展方法中的值。 (我知道我可以只传递由另一个参数的值,但我宁愿不要。另外,这是很有趣的)
感谢 凯文
--edit ------我有什么作为最终结果---------- 注意:这还没有完全测试,但似乎现在正在工作。
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()。
是的,谢谢你这么多。我有它的工作。如果别人想用一点,我会发布我的。 – kheit 2010-07-20 19:32:06