2016-04-15 61 views
2

由於@Html.EditorFor()正根據模型數據類型構建輸入字段。我想使用此方法併爲DATETIME類型的模型變量生成文本框,而不是日曆。有沒有辦法做到這一點?明確指定模型數據類型MVC/C#

+1

是'TextBoxFor'或' [DataType(DataType.Text)]',AFAIK。真正的問題是爲什麼你想編輯一個DateTime就好像它是文本一樣。 – CodeCaster

+0

@CodeCaster [DataType(DataType.Text)]不起作用,TextBoxFor我知道它會產生一個文本框,但整點是你可以使用FormEditorFor併爲DateTime var獲取文本框。 –

+0

@CodeCaster我需要將它解析爲SQL日期時間格式。 –

回答

0

您可以創建自己的助手來顯示和管理日期。

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); 
}