2016-07-15 210 views
1

我是新來的Web編程,我不得不使用JQuery數據時間插件。我在數據時間轉換方面遇到了很多問題,所以我對我做了一個簡單的處理,但奇怪而長的邏輯處理。 而不是創建一個DateTime屬性。我做了兩個,一個是字符串,其他爲空日期時間在視圖模型更改模型狀態在視圖模型(添加自定義驗證)

注:所有這些代碼是寫在視圖模型

public DateTime? InitialStartDate 
    { 
     get 
     { 
      return istartDate; 
     } 
     set 
     { 
      istartDate = value; 
     } 
    } 

    public string IStartDateString 
    { 
     get 
     { 
      if (istartDate == null) 
      { 
       return ""; 
      } 
      else 
      { 
       return istartDate.Value.ToString("MM/dd/yyyy"); 
      } 
     } 
     set 
     { 
      if (string.IsNullOrEmpty(value)) 
      { 
       istartDate = null; 
      } 
      else 
      { 
       DateTime TempDate=DateTime.Min; 
       if(DateTime.TryParseExact(value, "MM/dd/yyyy", CultureInfo.InvariantCulture, out TempDate) 
       { 
        InitialStartDate=TempDate; 
       } 
       else{ 
        InitialStartDate=null; 
        ErrorMessage="Can not convert date"; 
       } 
      } 
     } 
    } 

請告訴我如何很好地處理它。

其次

例如這個邏輯是好的,然後我想補充的ModelState錯誤。例如

  if(DateTime.TryParseExact(value, "MM/dd/yyyy", CultureInfo.InvariantCulture, out TempDate) 
       { 
        InitialStartDate=TempDate; 
       } 
       else{ 
        InitialStartDate=null; 
        ModelState.AddError('Date is not right '); 
       } 

有沒有這樣的事情。請幫忙非常感謝您閱讀我的所有問題:)

Forexample我分析它像

InitialStartDate= DateTime.ParseExact(value, "MM/dd/yyyy", CultureInfo.InvariantCulture); 

和價值是1/1/201 它會拋出異常。我不希望它拋出異常,但添加驗證錯誤,所以稍後在控制器中,當我檢查ModelState.IsValid 它返回false,我可以在視圖中顯示它。

 @Html.LabelFor(model => model.InitialStartDate, htmlAttributes: new { @class = "control-label col-offset-2" }) 
     @Html.TextBoxFor(model => model.IStartDateString, new { @id = "initialstartdate", value = Model.IStartDateString, @class = "form-control", tabindex = "34" }) 
     @Html.ValidationMessageFor(model => model.InitialStartDate, "", new { @class = "text-danger" }) 

我從視圖中設置其值。

與我的模型中的所有其他屬性。我有這個

 [DataType(DataType.Date)] 
     public DateTime? StartTime { get; set; } 
+0

你想解決什麼樣的問題?在使用jQuery日期時間插件的MVC中,通常我使用帶有'Html.EditorFor'模型綁定的jQuery datepicker,將模型發送到控制器,並在給出無效日期時間格式時執行'ModelState.AddModelError(「message」)'。請儘可能詳細解釋我的詳細預期結果。 –

+0

@TetsuyaYamamoto在問題結尾添加了更多文字。 – Charlie

+0

「value」變量從哪裏獲取數據?如果你有模特課只是展示它。我想你想使無效的日期時間格式的'ModelState'失效,並在你的視圖中顯示錯誤信息。 –

回答

1

試試這個

$(function() { 
 
    $("#datepicker").datepicker({ 
 
     changeMonth: true, 
 
     changeYear: true, 
 
     yearRange: '2011:2037', 
 
     dateFormat: 'dd/mm/yy', 
 
     minDate: 0, 
 
     defaultDate: null 
 
    }).on('change', function() { 
 
     $(this).valid(); // triggers the validation test 
 
     // '$(this)' refers to '$("#datepicker")' 
 
    }); 
 
});

我希望這將是對你有幫助。

+0

是的,解決了一個問題:) – Charlie

0

使用try-catch塊,並添加ModelState.AddModelError到您的代碼:

查看

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#initialstartdate").datepicker({ 
      changeMonth: true, 
      changeYear: true, 
      dateFormat: 'MM/dd/yyyy', 
      minDate: 0, 
      defaultDate: null 
      // see jQuery datepicker docs for more attributes 
     }).change(function() { 
      $(this).valid(); // validation test 
     }); 
    }); 
</script> 

<!-- EditorFor used to include datetime as is --> 
@Html.EditorFor(model => model.IStartDateString, new { @id = "initialstartdate", value = Model.IStartDateString, @class = "form-control", tabindex = "34" }); 

控制器

try { 
     if(DateTime.TryParseExact(value, "MM/dd/yyyy", CultureInfo.InvariantCulture, out TempDate) 
     { 
      InitialStartDate=TempDate; 
     } 
     else 
     { 
      InitialStartDate = null; 
      ModelState.AddModelError("Date is not right"); 
     } 
} 
catch (ArgumentException e) 
{ 
    ModelState.AddModelError("Date is not right"); 
} 

ModelState.AddModelError將無效ModelState,結果IsValid屬性變得false時返回您的觀點。

也許這遠遠沒有你目前的需求,因此歡迎任何建議。