2
由於@Html.EditorFor()
正根據模型數據類型構建輸入字段。我想使用此方法併爲DATETIME類型的模型變量生成文本框,而不是日曆。有沒有辦法做到這一點?明確指定模型數據類型MVC/C#
由於@Html.EditorFor()
正根據模型數據類型構建輸入字段。我想使用此方法併爲DATETIME類型的模型變量生成文本框,而不是日曆。有沒有辦法做到這一點?明確指定模型數據類型MVC/C#
您可以創建自己的助手來顯示和管理日期。
public static MvcHtmlString DatePickerFor<TModel, TProperty>
(this HtmlHelper<TModel> helper,
Expression<Func<TModel, TProperty>> expression)
{
string datePickerName =
ExpressionHelper.GetExpressionText(expression);
string datePickerFullName = helper.ViewContext.ViewData.
TemplateInfo.GetFullHtmlFieldName
(datePickerName);
string datePickerID = TagBuilder.CreateSanitizedId
(datePickerFullName);
ModelMetadata metadata = ModelMetadata.FromLambdaExpression
(expression, helper.ViewData);
DateTime datePickerValue = (metadata.Model == null ?
DateTime.Now : DateTime.Parse(
metadata.Model.ToString()));
TagBuilder tag = new TagBuilder("input");
tag.Attributes.Add("name", datePickerFullName);
tag.Attributes.Add("id", datePickerID);
tag.Attributes.Add("type", "date");
tag.Attributes.Add("value", datePickerValue.
ToString("yyyy-MM-dd"));
IDictionary<string, object> validationAttributes = helper.
GetUnobtrusiveValidationAttributes
(datePickerFullName, metadata);
foreach (string key in validationAttributes.Keys)
{
tag.Attributes.Add(key, validationAttributes[key].ToString());
}
MvcHtmlString html=new MvcHtmlString(
tag.ToString(TagRenderMode.SelfClosing));
return html;
}
準備使用助手
public class EmployeeMetadata
{
[Required]
public DateTime BirthDate { get; set; }
}
[MetadataType(typeof(EmployeeMetadata))]
public partial class Employee
{
}
public ActionResult Index()
{
NorthwindEntities db = new NorthwindEntities();
return View(db.Employees.First());
}
的,你可以用你的助手
<script src="~/Scripts/jquery-1.10.2.js"></script>
<script src="~/Scripts/jquery.validate.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.js"></script>
@using(Html.BeginForm("ProcessForm","Home",FormMethod.Post))
{
@Html.DatePicker("birthdateUnbound")
@Html.DatePickerFor(m=>m.BirthDate)
@Html.ValidationMessageFor(m=>m.BirthDate)
<input type="submit" value="Submit" />
}
要提交表單
public ActionResult ProcessForm(Employee obj)
{
return View("Index",obj);
}
是'TextBoxFor'或' [DataType(DataType.Text)]',AFAIK。真正的問題是爲什麼你想編輯一個DateTime就好像它是文本一樣。 – CodeCaster
@CodeCaster [DataType(DataType.Text)]不起作用,TextBoxFor我知道它會產生一個文本框,但整點是你可以使用FormEditorFor併爲DateTime var獲取文本框。 –
@CodeCaster我需要將它解析爲SQL日期時間格式。 –