我想知道是否有可能在ASP.NET MVC 2中创建一个自定义强类型的HTML帮助器?创建一个常规(读取不强类型)助手很简单,但我很难创建强类型的版本。例如,我想创建一个DatePickerFor html帮手...是否可以创建一个自定义的ASP.NET MVC强类型的HTML Helper?
任何指导或片段将不胜感激, 预先感谢您! JP
我想知道是否有可能在ASP.NET MVC 2中创建一个自定义强类型的HTML帮助器?创建一个常规(读取不强类型)助手很简单,但我很难创建强类型的版本。例如,我想创建一个DatePickerFor html帮手...是否可以创建一个自定义的ASP.NET MVC强类型的HTML Helper?
任何指导或片段将不胜感激, 预先感谢您! JP
好吧,我想通了(这是非常简单的...)。张贴我的重载之一,以防其他人遇到此问题。
public static string DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel, TProperty>> expression)
where TModel : class
{
var inputName = ExpressionHelper.GetExpressionText(expression);
return htmlHelper.DatePicker(inputName);
}
public static string DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel, TProperty>> expression)
where TModel : class
{
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
return htmlHelper.DatePicker(metadata.PropertyName);
}
我用ModelMetadata如果创建日期选择器日期时间模板,这也将工作。
这是否说明'html.DatePickerFor(m => m.User.Birthday)'? (多级别的解引用?)它看起来像'.PropertyName'成员只会返回最近的名称,不应该使用所有的级别? – 2012-12-20 21:16:46
我刚刚尝试了以下内容来创建一个强类型的CKEditor帮助程序,它似乎是完美无缺的工作。这假定你已经在你的项目中包含了jquery和必要的ckeditor脚本。查看ckeditor配置也可能很好,但是这满足了我目前的需求。
public static MvcHtmlString CkEditor(this HtmlHelper htmlHelper, string name, string value, object htmlAttributes)
{
var output = htmlHelper.TextArea(name, value, htmlAttributes).ToString();
output += string.Format("<script type=\"text/javascript\">$(document).ready(function(){{ $('#{0}').ckeditor(); }});</script>", name);
return MvcHtmlString.Create(output);
}
public static MvcHtmlString CkEditor(this HtmlHelper htmlHelper, string name, string value)
{
return htmlHelper.CkEditor(name, value, null);
}
public static MvcHtmlString CkEditorFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes) where TModel : class
{
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
return htmlHelper.CkEditor(metadata.PropertyName, metadata.Model as string, htmlAttributes);
}
public static MvcHtmlString CkEditorFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression) where TModel : class
{
return htmlHelper.CkEditorFor(expression, null);
}
@JP你是如何得到价值的?例如html.DatePicker(x => x.Date),你如何得到x.Date值 – Omu 2011-01-10 08:29:46