2016-03-08 33 views
3

技術問題過帳表單數據使用Ajax

欲形式數據發佈到異步使用AJAX的控制器的控制器的方法。以下是我的JavaScript的簡化視圖:

function SendForm() { 
    var formData = new FormData(); 
    formData.append('value1', 'hello'); 
    formData.append('value2', 'world'); 
    var xhr = new XMLHttpRequest(); 
    xhr.upload.onload = function() { 
    // stuff that happens on the callback 
    }; 
    xhr.open('POST', 'http://server/controller/SomeAction', true); 
    xhr.setRequestHeader('Content-Type', 'multipart/form-data'); 
    xhr.send(formData); 
} 

問題始於所有方法參數爲空的服務器端。

[HttpPost] 
public ContentResult SomeAction(string value1, string value2) 
{ 
    if(String.IsNullOrEmpty(value1) || String.IsNullOrEmpty(value2)) { throw new Exception("World not found."); } 
    return Content("something"); 
} 

問題

我的問題是,爲什麼所有的方法參數的空?

額外的研究

我看了請求流裏面,我可以從長度看,有內容有,但不管是什麼原因MVC未能符合我在FORMDATA指定的參數反對控制器中的方法中的參數。

爲什麼我這樣做?

是的,我想POST數據。我簡化了這個例子,但是我想發佈更多的數據,而不是放在一個URL上,所以一個REST方法(在querystring上傳遞數據)對於這個解決方案是不可接受的。

+0

你正在上傳文件嗎? –

+0

是的,我會上傳一個文件。我使用formData.append('file',fileObject,fileObject.name),其中fileObject是從fileInputElement.files [0]中獲得的。在服務器端,我一直試圖使用HttpPostedFileBase來獲取文件。我還會發送一些特定於申請的補充參數。 –

回答

1
function SendForm() { 
    var formData = new FormData(); 
    formData.append('value1', 'hello'); 
    formData.append('value2', 'world'); 
    $.ajax({ 
    url: "http://server/controller/SomeAction", 
    type: 'post', 
     cache: false, 
     contentType: false, 
     processData: false, 
     data: formData, 
     success: function (data) { 
     // ..... any success code you want 
    } 
    }); 
+0

我安裝了jQuery並嘗試了你的建議。 Firefox返回以下錯誤:在未實現接口FormData的對象上調用'append'。爲了解決它,我添加了「processData:false」。它仍然沒有工作,所以基於我發現的另一個SO,我添加了「contentType:false」和「cache:false」。現在這似乎在工作,所以我會做更多的測試。 –

+0

你可以單獨傳遞字符串中的數據 –

+0

謝謝Darrell。如果你讓我發現的三個更正是必需的,我會接受你的答案。 –

1
function SendForm() { 
    var formData = new FormData(); 
    formData.append('value1', 'hello'); 
    formData.append('value2', 'world'); 
    $.ajax({ 
    url: "http://server/controller/SomeAction", 
    type: 'post', 
    cache: false, 
    contentType: false, 
    processData: false, 
    data: { formData: formData, value1: "hello", value2: "world"}, 
    success: function (data) { 
    // ..... any success code you want 
    } 
    }); 

And Recieve JSON at server side

請試試這個。我是無法運行在一個項目now.This代碼是理論雖然,您可以seperately使用AJAX

If Only value1 and value2 is reqd - Server

[HttpPost] 
public JsonResult SomeAction(string value1, string value2) 
{ 
    if(String.IsNullOrEmpty(value1) || String.IsNullOrEmpty(value2)) { throw 
    new Exception("World not found."); } 
    return Content("something"); 
    } 
傳遞數據

JQuery

$.ajax({ 
    url: "http://server/controller/SomeAction", 
    type: 'post', 
    cache: false, 
    contentType: false, 
    processData: false, 
    data: { value1: "hello", value2: "world"}, 
    success: function (data) { 
    // ..... any success code you want 
    } 
    }); 
1

嘗試使用AJAX這種方式,

function SendForm() {  
     $.ajax({ 
       type: 'POST', 
       url: '/controller/SomeAction', 
       data: { value1 : 'hello', value2 : 'world' }, 
       success: function (result) { 
        //Your success code here.. 
       }, 
       error: function (jqXHR) {       
        if (jqXHR.status === 200) { 
         alert("Value Not found"); 
        } 
       } 
      }); 
    } 

您可以找到value1value2到服務器端。

控制器

[HttpPost] 
public ContentResult SomeAction(string value1, string value2) 
{ 
    if(String.IsNullOrEmpty(value1) || String.IsNullOrEmpty(value2)) { throw new Exception("World not found."); } 
    return Content("something"); 
} 
2

儘量使AJAX調用這種方式,我認爲這是使請求

function SendForm() { 
      var data = {}; 
      data.value1 = "Hello"; 
      data.value2 = "World"; 

      $.ajax({ 
       url: "http://server/controller/SomeAction", 
       type: "POST", 
       dataType: "json", 
       data: JSON.stringify(data), 
       contentType: "application/json; charset=utf-8;", 
       success: function (data) { 
        // your code in success 
        alert("success"); 
       } 
      }); 
     } 

的最佳方式和操作方法將

[HttpPost] 
public JsonResult SomeAction(string value1, string value2) 
{ 
    if(String.IsNullOrEmpty(value1) || String.IsNullOrEmpty(value2)) 
    { 
    throw new Exception("World not found."); 
    } 
    return Json("something"); 
} 
相關問題