2013-04-11 114 views
4

請考慮下面的例子:TextBoxFor幫手混入日期的日期和月份

  1. 視圖模型

    public class FooViewModel 
    { 
        public DateTime Date { get; set; } 
    } 
    
  2. 控制器

    public class HomeController : Controller 
    { 
        [HttpGet] 
        public ActionResult Index(FooViewModel foo) 
        { 
         return View(foo); 
        } 
        [HttpPost] 
        public ActionResult Submit(FooViewModel foo) 
        { 
         return RedirectToAction("Index", foo); 
        } 
    } 
    
  3. 視圖

    @model MvcApplication1.Models.FooViewModel 
    <h1>@Model.Date</h1> 
    @using (Html.BeginForm("Submit", "Home", FormMethod.Post)) 
    { 
        @Html.TextBoxFor(m => m.Date) 
        <input type="submit" value"Submit" /> 
    } 
    
  4. 路線

    routes.MapRoute(
        null, 
        "", 
        new { controller = "Home", action = "Index" } 
    ); 
    routes.MapRoute(
        null, 
        "{action}", 
        new { controller = "Home" }, 
        new { action = "Submit" } 
    ); 
    

的問題是,表單提交日期編輯後得到的值與日和月交換:

  1. after first submit
  2. after resubmit

我能做些什麼才能使其正常工作?


實際上我試圖格式化編輯器的值:

  1. @Html.TextBoxFor(m => m.Date, new { value = Model.Date.ToString("dd.MM.yyyy") })
  2. 使用編輯模板,如圖MVC 2 Editor Template with DateTime,僅當然採用MVC3;而且我還使用EditorFor輔助器來使模板得到利用。
  3. 使用DataAnnotations[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MMM/dd/yyyy}")]

這些改變任何東西都沒有。編輯器的值沒有改變,也沒有顯示格式。


最後我(跟隨the answer by DrJokepu)進行管理,使這項工作只能用原始的HTML,即沒有輔助方法爲DateTime

public static MvcHtmlString GetDateEditor(this FooViewModel model) 
{ 
    string temp = "<input id=\"Date\" type=\"text\" value=\"{0}\" name=\"Date\" 
        data-val-required=\"Please, enter a valid date\" 
        data-val=\"true\" />"; 
    return MvcHtmlString.Create(
       string.Format(temp, 
           model == null 
            ? string.Empty 
            : model.Date.ToString("dd.MM.yyyy"))); 
    } 

如果有一種方法可以實現同樣的結果任何輔助方法仍然是一個祕密,我...

+0

如果格式化日期,該怎麼辦? – 2013-04-11 06:26:01

+0

@HanletEscaño我確實需要在編輯器中格式化日期,這確實也應該解決問題。然而,我沒有格式化它...我會在一段時間內描述我在這個問題的嘗試 – horgh 2013-04-11 06:31:39

+0

我猜數據庫中的日期格式是不同的,這就是爲什麼它導致的問題,你可以將日期格式應用到您的ViewModel (如果你使用它們來綁定視圖?) – dakait 2013-04-11 06:38:29

回答

3

請嘗試些許變化版本:
@Html.TextBoxFor(m => m.Date, new { @Value = Model.Date.ToString("dd.MM.yyyy") })

+0

我絕對確定我在開始時用大寫字母'V'和'@'試過了,它不起作用。我錯了... – horgh 2013-04-11 07:57:12