我想为我的任何模型中的每个数据时对象配置EditorFor模板。
我收到了这个错误:
\ EditorTemplates \ DateTime.cshtml(1):错误CS1973: 'System.Web.Mvc.HtmlHelper'没有命名的适用方法 'TextBox'但似乎有一个名称的扩展方法。 无法动态分派扩展方法。考虑投射 动态参数或调用扩展方法没有 扩展方法语法。
这是在EditorTemplate内部调用的整个代码,DateTime.cshtml放在EditorTemplates文件夹中。
有什么想法吗?
以下是我在视图中所说的内容:
<div class="editor-label">
@Html.LabelFor(model => model.DateOfBirth)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.DateOfBirth)
@Html.ValidationMessageFor(model => model.DateOfBirth)
</div>
这是我制作的自定义EditorTemplate:
@Html.TextBox("", Model, new { @class = "date-selector" });
THE EDITOR IS WORKING
基本上,对于模型中的每个datetime对象,我想将类“date-selector”添加到该html元素中。这是出于jQueryUI的目的。
我做错了什么?
答案 0 :(得分:4)
您需要定义editortemplate的模型类型。将“@model DateTime”添加到cshtml文件的顶部:
@model DateTime
@Html.TextBox("", Model, new { @class = "date-selector" });
THE EDITOR IS WORKING
答案 1 :(得分:4)
您可以创建扩展方法,如下所示:
public static MvcHtmlString CalenderTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
{
return htmlHelper.TextBoxFor(expression, "{0:M/dd/yyyy}", new { @class = "datepicker text" });
}
然后在视图中使用如下:
@Html.CalenderTextBoxFor(model => model.Employee.HireDate)
答案 2 :(得分:0)
我知道这是一个较老的问题,但我有同样令人沮丧的问题,我不想创建一个适用于所有DateTime值的EditorTemplate(我的UI中有时候我想要显示时间而不是一个JQueryUI下拉日历)。在我的研究中,我遇到的根本问题是:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
等适当属性修饰时,但不允许我应用自定义“日期 - 选择器“class。因此,我扩展了@Ashraf的答案并创建了具有以下优点的自定义HtmlHelper类:
我在这里发帖,希望它可能在某些时候帮助别人。欢迎提出任何有关变更的建议。
public static MvcHtmlString CalenderTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes = null)
{
var mvcHtmlString = System.Web.Mvc.Html.InputExtensions.TextBoxFor(htmlHelper, expression, htmlAttributes ?? 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());
}
对于那些想要了解查找具有date-picker
类装饰的对象的JQuery语法然后呈现日历的人,这里是:
$(document).ready(function () {
$('.date-picker').datepicker({ inline: true, maxDate: 0, changeMonth: true, changeYear: true });
$('.date-picker').datepicker('option', 'showAnim', 'slideDown');
});
希望这可以帮助将来有这种需求的人。