2017-03-21 9 views
0

私はMVCとDevExpressが比較的新しいです。私は日付フィールドを取ってコントローラに渡す必要があるUIを持っています。非常に単純なタスク。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メソッドを使用してDateを渡すことを検討しています。

[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/properway-to-use-ajax-post-in-jquery-to-pass-model-from-strongly-typed-mvc3-vie – Etienne

答えて

0

問題が発生したときにDateTime.TryParseによって真っ直ぐに解析可能ではないJSから、クライアント側の日付の異なる表現。 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

関連する問題