2014-01-30 123 views
0

我試圖將用JS打開的csv文件發送到用C#編寫的方法,其中csv文件將被解析並添加到數據庫中。通過Ajax發送csv

我打開文件並獲取其內容沒有問題。 但是,無論我如何使用Ajax調用,我都會在CreateFromFile方法中收到空數據。 在這裏你可以看到我的代碼:

var a = fr.result; 
$.ajax({ 
url: "/DeviceInstance/CreateFromFile", 
type: "POST", 
datatype: "html", 
data: a, 
error: function (data) { 
    alert("Dodanie nie powiodło się Jeden lub wiecej numerów seryjnych nie są nikalne " + data); 
}, 
success: function (data) { 
    if (data.length > 0) { 
     alert(data); 
    } 
    else { 
     alert("Operacja zakonczona sukcesem") 
    } 
    } 
}); 

和:

​​

我問我應該怎麼修改我的代碼,使事情的工作?

這裏:fr.result:

samsung;galaxy ;s3;1234567 
samsung;galaxy ;s4;54321 
samsung;galaxy ;s5;34567yu8 
+1

什麼是fr.result? – Liath

回答

1

你可以讀取請求的輸入流進入人體有效載荷:

[HttpPost] 
public JsonResult CreateFromFile() 
{ 
    byte[] data = new byte[Request.InputStream.Length]; 
    Request.InputStream.Read(data, 0, data.Length); 
    string csv = Encoding.UTF8.GetString(data); 
    // ... do something with the csv 

    return Json("Sukces"); 
} 
在AJAX請求

而且你似乎已經指定datatype: "html"。這有兩個問題:

  1. 該參數被稱爲dataType而不是datatype
  2. 您指定了html,但您的控制器操作返回JSON。

所以這是非常不一致的事情。我建議你擺脫這個參數,並讓jQuery使用響應Content-Type標題自動推斷正確的類型。

1

請嘗試以下(假設你的a有效載荷是一個真正的字符串):

$.ajax({ 
    url: '/DeviceInstance/CreateFromFile', 
    type: 'POST', 
    dataType: 'json', 
    contentType: 'application/json', 
    data: JSON.stringify({ dane: a }), 
    /* callbacks */ 
}); 

而且你的控制器動作現在應該如下所示:

[HttpPost] 
public JsonResult CreateFromFile(string dane) 
{ 
    // Parse CSV data from "dane" 
} 

希望這會有所幫助。

+1

'[FromBody]'在ASP.NET Web API中使用。在他的例子中,他使用了一個普通的ASP.NET MVC控制器,其中這個屬性根本沒有任何作用。 –

+0

@DarinDimitrov好抓!我做了一個編輯。 – volpav