2017-03-21 33 views
0

我對MVC和DevExpress相對較新。我有一個用戶界面,我需要採取日期字段並將其傳遞給控制器​​。非常簡單的任務。MVC按鈕沒有觸發與HttpPost的ActionResult

我的看法看起來像。

<script type="text/javascript"> 
    var positionDate = "1/1/2014"; 

    function AddClick(s, e) { 
     debugger; 
     positionDate = LockedDateToAdd.GetDate().toDateString(); 

     $.ajax({ 
      type: "POST", 
      url: "/LockedDate/AddLockedDate", 
      data: { positionDate: positionDate }, 
      success: function (msg) { LockedDateGridView.PerformCallback(); } 
     }); 
    } 
</script> 

@{ 
    ViewBag.Title = "Locked Dates"; 
} 

<h4>Locked Dates</h4> 

@using (Html.BeginForm()) 
{ 
    <table> 
     <tr> 
      <td> 
       @Html.DevExpress().DateEdit(settings => 
       { 
        settings.Name = "LockedDateToAdd"; 
        settings.Date = DateTime.Today; 
        settings.Properties.AllowNull = false; 
        settings.Properties.DateOnError = DateOnError.Today; 
        settings.Properties.CalendarProperties.ShowWeekNumbers = false; 
       }).GetHtml() 
      </td> 
      <td> 
       @Html.DevExpress().Button(settings => 
       { 
        settings.Name = "LockedDateAdd"; 
        settings.Text = "Add"; 
        settings.ClientSideEvents.Click = "AddClick"; 
        settings.UseSubmitBehavior = false; 
       }).GetHtml() 
      </td> 
     </tr> 
    </table> 
} 

我期待通過使用AddClick方法的日期。

控制器的樣子:

[HttpPost] 
public ActionResult AddLockedDate(string positionDate) 
{ 
    DateTime dateValue; 

    if (DateTime.TryParse(positionDate, out dateValue)) 
    { 
     _dataAccess.AddLockedDate(dateValue); 
    } 

    return Content(""); 
} 

的問題是,我的代碼是不是打AddLockedDate的ActionResult。當我刪除[HttpPost],它確實打了,但positionDate是空的。

我在這裏錯過了什麼?任何想法。 感謝您的幫助。

+0

您正在使用什麼版本的MVC的?我看不出你的代碼有什麼問題。你讀過這個嗎? http://stackoverflow.com/questions/5980389/proper-way-to-use-ajax-post-in-jquery-to-pass-model-from-strongly-typed-mvc3-vie – Etienne

回答

0

問題發生時從JS客戶端的日期,其不直由DateTime.TryParse可分析的不同表示。

使用console.log(positionDate),捕獲的日期格式變得像這樣(在寫的當前時間):

Wed Mar 22 2017 

日期格式爲非可解析使用TryParse而不指定適當的日期格式,因此使用具有正確的格式TryParseExact

控制器

[HttpPost] 
public ActionResult AddLockedDate(string positionDate) 
{ 
    DateTime dateValue; 

    // parse exactly as toDateString method returns 
    if (DateTime.TryParseExact(positionDate, "ddd MMM d yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateValue)) 
    { 
     _dataAccess.AddLockedDate(dateValue); 
    } 

    return Content(""); 
} 

查看

<script type="text/javascript"> 
    var positionDate = "1/1/2014"; 

    function AddClick(s, e) { 
     debugger; 
     positionDate = LockedDateToAdd.GetDate().toDateString(); 

     $.ajax({ 
      type: "POST", 
      url: "@Url.Action("AddLockedDate", "LockedDate")", 
      data: JSON.stringify({ positionDate: positionDate }), 
      dataType: "json", 
      contentType: "application/json; charset=utf-8", 
      success: function (msg) { LockedDateGridView.PerformCallback(); } 
     }); 
    } 
</script> 

相關:

Javascript date to C# via Ajax

DateTime.TryParse(MSDN)

DateTime.TryParseExact(MSDN)

+0

山本哲也,謝謝你的幫助。你的建議奏效了。 – ProgSky

0

看來你的代碼沒有問題。按照下面的方法更新ajax方法。

<script type="text/javascript"> 
    var positionDate = "1/1/2014"; 

    function AddClick(s, e) { 
     debugger; 
     positionDate = LockedDateToAdd.GetDate().toDateString(); 

     $.ajax({ 
      type: "POST", 
      url: "/LockedDate/AddLockedDate", 
      data: JSON.stringify({ positionDate: positionDate }), 
      contentType: 'application/json; charset=utf-8', 
      success: function (msg) { LockedDateGridView.PerformCallback(); } 
     }); 
    } 
</script> 
+0

謝謝喬尼。你的建議非常有幫助。我的問題現在已解決。 – ProgSky