2013-02-09 55 views
1

我正在作爲asp.net MVC 2應用程序工作。我有一個這樣的形式:獲取jsonresult操作導致jQuery按鈕單擊

<% using (Html.BeginForm("SaveCallRecording", "Recording", FormMethod.Post, new { id = "frmAddCallRecording", name = "frmAddCallRecording" })) 
          {%> 

     <tr> 
            <td> 
            </td> 
            <td> 
             <input type="button" id="btnCall" title="Call" value="Call" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" /> 
             <input type="button" id="btnNewCall" title="New Call" value="New Call" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" /> 
            </td> 
           </tr> 
          </table> 
          <%} %> 

我的document.ready

$("#btnCall").click(function() { 
       var CallStatus = $("#txtCallStatus").val(); 
       if (CallStatus == 'READY') { 
        if ($("#isUniquePassword").is(':checked') && $("#UniquePassword").val() == '') { 
         $("#dialog-RecipientEmail-error").dialog("open"); 
        } 
        else { 
         $.ajax({ 
          type: "POST", 
          dataType: "json", 
          url: "/account/getGenericPassword", 
          success: function (data) { 
           if (data == null || data == "") { 
            if ($('#isGenericPassword').is(':checked')) { 
             $("#dialog-add-generic-password").dialog("open"); 
            } 
           } 
           else { 
             $("#frmAddCallRecording").submit(); 
           //after this I want to show alert based on result         
           } 
          } 
         }); 
        } // end of isUniquePassword if 
       } // end of call status if 
       else if (CallStatus == 'NOT SET') { 
        $("#dialog-required-fields").dialog("open"); 
       } 
      }); 

器和控制器具有這是這樣的:在執行的ActionResult SaveCallRecording

[Authorize] 
     [HttpPost] 
     public JsonResult SaveCallRecording(CallRecording recording, FormCollection form) 
     { 
    return Json("record saved!"); 
      } 

後,我想顯示成功或失敗的消息。我該怎麼做 ?如果我嘗試使用$ .ajax,我需要使用`data:{「item」:「value1」,....}手動創建表單數據。我嘗試使用$ .post,但我需要手動將數據傳遞給它。如果我讓btnCall作爲提交按鈕而不是按鈕,那麼驗證失敗。

我想:

1)第一和顯示警示驗證表單如果表單未通過驗證。 2)將表單數據發佈到json操作方法SaveCallRecording 3)從Action Method獲取成功或失敗消息並顯示爲提醒

請給出解決方案。

回答

0

你可以通過把這種形式的部分(_SaveCallRecordingForm.ascx)內啓動:如果你希望能夠做一些驗證,我會建議你做

<% using (Html.BeginForm("SaveCallRecording", "Recording", FormMethod.Post, new { id = "frmAddCallRecording", name = "frmAddCallRecording" })) { %> 
    <tr> 
     <td></td> 
     <td> 
      <input type="button" id="btnCall" title="Call" value="Call" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" /> 
      <input type="button" id="btnNewCall" title="New Call" value="New Call" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" /> 
     </td> 
    </tr> 
<% } %> 

而且這部分的強類型你CallRecording模型並使用Html助手來生成這種形式的輸入字段。您還可以使用validationMessageFor助手爲錯誤生成佔位符。

然後你可以AJAXify這種形式:

else { 
    var $form = $("#frmAddCallRecording"); 
    $.ajax({ 
     url: $form.attr('action'), 
     type: $form.attr('method'), 
     data: $form.serialize(), 
     success: function(result) { 
      if (result.success) { 
       alert('Thanks for submitting'); 
      } else { 
       $('#someContainerOfYourForm').html(result); 
      } 
     } 
    }); 
} 

,有你的控制器動作進行驗證,並返回一個JsonResult(在成功的情況下),或者有錯誤的列表中PartialView:

[Authorize] 
[HttpPost] 
public ActionResult SaveCallRecording(CallRecording recording) 
{ 
    if (!ModelState.IsValid) 
    { 
     // There were validation errors => let's redisplay the form 
     return PartialView("_SaveCallRecordingForm", recording); 
    } 

    // at this stage we know that the model is valid => do some processing 
    // and return a JsonResult to indicate the success 
    return Json(new { success = true }); 
} 
+0

我需要在savecall錄製動作方法之前執行一些檢查,例如一個字段的值爲Ready,另一個字段在檢查相關複選框時具有值。我怎樣才能做到這些? – DotnetSparrow 2013-02-09 10:29:19

+0

您可以在發送AJAX請求之前進行這些檢查。在我的示例中,我向您展示瞭如何發送此AJAX請求,但您可以輕鬆地在客戶端上執行檢查並有條件地發送此AJAX請求。 – 2013-02-09 10:29:50

+0

讓我詳細檢查一下。 – DotnetSparrow 2013-02-09 10:31:36