2013-03-15 81 views
2

我嘗試了幾乎所有在互聯網上閱讀的內容,在本網站上(web.config中的globlalization文化,在我的模型中添加的DisplayFormat ...),但沒有找到我的答案。MVC4無效的日期時間值

我的網絡應用程序允許用戶通過提供一些信息來創建人。其中一個信息是開始日期,它是一個DateTime值。我使用jQuery UI日期選擇器來允許通過日曆選擇日期。當我選擇我的日期(事實上,日期大於12的日期)時,應用程序向我顯示驗證錯誤消息。例如,如果我選擇今天的日期,則會顯示:值「03/15/2013」​​對於StartDate無效。

筆者認爲:

@model BuSIMaterial.Models.Person 

@{ 
    ViewBag.Title = "Create"; 
} 

<h2>Create</h2> 

@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 

    <fieldset> 
     <legend>Person</legend> 

     <div class="editor-label"> 
      First name : 
     </div> 
     <div class="editor-field"> 
      @Html.TextBoxFor(model => model.FirstName, new { maxlength = 50 }) 
      @Html.ValidationMessageFor(model => model.FirstName) 
     </div> 

     <div class="editor-label"> 
      Last name : 
     </div> 
     <div class="editor-field"> 
      @Html.TextBoxFor(model => model.LastName, new { maxlength = 50 }) 
      @Html.ValidationMessageFor(model => model.LastName) 
     </div> 

     <div class="editor-label"> 
      National number : 
     </div> 
     <div class="editor-field"> 
      @Html.TextBoxFor(model => model.NumNat, new { maxlength = 11 }) 
      @Html.ValidationMessageFor(model => model.NumNat) 
     </div> 

     <div class="editor-label"> 
      Start date : 
     </div> 
     <div class="editor-field"> 
      @Html.TextBoxFor(model => model.StartDate, new {@class = "datepicker" }) 
      @Html.ValidationMessageFor(model => model.StartDate) 
     </div> 

     <div class="editor-label"> 
      End date : 
     </div> 
     <div class="editor-field"> 
      @Html.TextBoxFor(model => model.EndDate, new { @class = "datepicker" }) 
      @Html.ValidationMessageFor(model => model.EndDate) 
     </div> 

     <div class="editor-label"> 
      Distance House - Work (km) : 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.HouseToWorkKilometers) 
      @Html.ValidationMessageFor(model => model.HouseToWorkKilometers) 
     </div> 

     <div class="editor-label"> 
      Category : 
     </div> 
     <div class="editor-field"> 
      @Html.DropDownList("Id_ProductPackageCategory", "Choose one ...") 
      @Html.ValidationMessageFor(model => model.Id_ProductPackageCategory) <a href = "../ProductPackageCategory/Create">Add a new category?</a> 
     </div> 

     <div class="editor-label"> 
      Upgrade? : 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Upgrade) 
      @Html.ValidationMessageFor(model => model.Upgrade) 
     </div> 

     <p> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 
} 

<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
    @Scripts.Render("~/bundles/jqueryui") 
    @Styles.Render("~/Content/themes/base/css") 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $(".datepicker").datepicker({ 

      }); 
     }); 
    </script> 
} 

在我的角色模型的開始日期:

[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)] 
    [DataMemberAttribute()] 
    public global::System.DateTime StartDate 
    { 
     get 
     { 
      return _StartDate; 
     } 
     set 
     { 
      OnStartDateChanging(value); 
      ReportPropertyChanging("StartDate"); 
      _StartDate = StructuralObject.SetValidValue(value); 
      ReportPropertyChanged("StartDate"); 
      OnStartDateChanged(); 
     } 
    } 
    private global::System.DateTime _StartDate; 
    partial void OnStartDateChanging(global::System.DateTime value); 
    partial void OnStartDateChanged(); 

沒有任何人有一個解決方案來處理這個問題呢?

+0

不jQuery的datepicker返回一個字符串值?你如何解析它? – 2013-03-15 13:04:03

+0

可能是您的代碼需要以mm/dd/yyyy格式顯示日期時間,其中日期選擇器以dd/mm/yyyy格式返回日期。所以15不是有效的月份數字,它是給出錯誤。 – Narendra 2013-03-15 13:04:14

+0

@四十二:說實話,我遵循教程爲了實現日期選擇器功能,所以我沒有添加任何內容,但在教程 – Traffy 2013-03-15 13:09:07

回答

2

首先,您似乎將原始實體傳遞給您的視圖,這不是一個好主意。 MVC中的正確方法是創建一個視圖模型,其中包含您的視圖所需的所有信息,僅此而已。

我們您的問題:

當我選擇我的日期(其實,這裏的天大於12日期),應用程序顯示我的驗證錯誤消息

這給我的印象這是一個文化衝突的問題,您的MVC應用程序預計日期爲dd/mm/yyyy但接收它爲mm/dd/yyyy。 MVC中的默認模型綁定器將使用當前線程的文化 - 如果您確定線程正在使用正確的文化,那麼我的猜測是它不會喜歡這樣的事實,您只能通過Date而不是DateTime ,但不太可能。

通常最好的方法是使用與文化無關的標準化日期格式,即UTC Format,這樣可以避免任何轉換問題。

+0

感謝您的回答!但是,你能否給我一個方法/建議來做到這一點? – Traffy 2013-03-15 13:29:19

+0

@Traffy做什麼特別?我在答案中提出了幾點意見。 – James 2013-03-15 13:31:08

+0

實際上,當我將日期格式設置爲dd/mm/yyyy時,它不起作用。錯誤消息已更改:「字段StartDate必須是日期」。我也嘗試在我的web.config中指定文化爲auto,如下所示: <全球化文化=「auto」uiculture =「auto」/> – Traffy 2013-03-15 13:36:17

相關問題