2016-04-15 19 views
2

@Html.EditorFor()はモデルデータ型に従って入力フィールドを構築しているためです。このメソッドを使用し、カレンダーの代わりにDATETIME型のモデル変数のテキストボックスを生成したいと思います。これを行う方法はありますか?明示的にモデルデータ型を指定します。MVC/C#

+1

'TextBoxFor'または'のどちらかを送信するには、あなたのヘルパー

<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" /> } 

を使用することができます[DataType(DataType.Text)] '、AFAIK。実際の質問は、それがテキストのようにDateTimeを編集する理由です。 – CodeCaster

+0

@CodeCaster [DataType(DataType.Text)]は機能せず、TextBoxFor私はそれがテキストボックスを生成するだろうと知っていますが、全体のポイントはFormEditorForを使用し、DateTime varのテキストボックスを得ることができました。 –

+0

@CodeCaster SQLに対してDateTime形式で解析する必要があります。 –

答えて

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

の使用を準備すると、あなたのフォーム

public ActionResult ProcessForm(Employee obj) 
{ 
    return View("Index",obj); 
} 
関連する問題