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