2013-04-23 55 views
0

這是我的形式發送形式控制器阿賈克斯

<form id="postProblemForm" action="/Problems/Post" method="post" enctype="multipart/form-data"> 
      <input type="text" id="problemSubject" name="problemSubject" class="inp-form"/> 
      <input type="file" id="uploadFile" name="uploadFile"/> 
      <textarea rows="" cols="" class="form-textarea" id="problemDescription" name="problemDescription"></textarea> 
      <input type="submit" value="Post" id="btnPostProblem" style="width:70px;"/> 

    </form> 

以下是JS

$("#postProblemForm").submit(function (event) { 
       event.preventDefault(); 
       var $this = $(this); 
       var url = $this.attr('action'); 
       var dataToSend = $this.serialize(); 
       var callBack = function (isPosted) { 
            if (isPosted) { alert("posted successfully"); } } 
       $.get(url,dataToSend,callBack); 

      }); 

以下是控制器代碼

[HttpPost] 
     public bool Post(FormCollection form) 
     { 
      string subject = form["problemSubject"]; 
      string description = form["problemDescription"]; 
      var image = WebImage.GetImageFromRequest(); 

      return true; 

     } 

但是控制器方法不會被調用。請幫忙。

回答

0

您正在對接受POST請求的控制器方法執行GET。您需要將其更改爲:

$.post(url,dataToSend,callBack); 
2

您無法使用AJAX上傳文件。我發現你的表單包含一個文件輸入,但這不適用於AJAX。您也正在使用$.get而您可能想要$.post的內容。你的行爲的另一個問題是它應該返回一個ActionResult而不是布爾類型。例如,你可以返回一個JsonResult來處理問題。

如果您希望能夠使用表單上傳文件,您可以使用客戶端上傳插件,例如Uploadify,Fine UploaderjQuery.form plugin

下面是例如你的代碼的外觀像與jQuery.form插件:

$('#postProblemForm').ajaxForm(function(isPosted) { 
    if (isPosted) { 
     alert('posted successfully'); 
    } 
}); 
+0

確定其罰款。但我想要客戶端驗證,然後必須發送表單到控制器。應該做什麼? – 2013-04-23 06:25:40

+0

客戶端驗證與AJAX完全無關。這是兩種不同的概念。您可以完全正確地啓用客戶端驗證,並仍然將表單提交爲常規表單。例如,讓我們假設你想要'problemSubject'字段。只需用'[Required]'屬性來修飾視圖模型的屬性,然後使用助手來生成該字段,而不是像以前那樣對其進行硬編碼:'@ Html.EditorFor(x => x.ProblemSubject)''。然後包含一個相應的驗證佔位符:'@ Html.ValidationMessageFor(x => x.ProblemSubject)'。 – 2013-04-23 06:27:01

+0

......並最終包含'jquery.validate.js'和'jquery.validate.unobtrusive.js'腳本。 – 2013-04-23 06:29:12