通过Ajax发送csv

时间:2014-01-30 08:35:54

标签: c# jquery ajax asp.net-mvc csv

我正在尝试将用JS打开的csv文件发送到用C#编写的方法,其中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")
    }
  }
});

[HttpPost]
public JsonResult CreateFromFile(object data)
{

    return Json("Sukces");
}

我问我应该如何修改我的代码以使其有效?

这里:fr.result:

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

2 个答案:

答案 0 :(得分: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 :(得分: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。
  3. 这是非常不一致的事情。我建议你摆脱这个参数,让jQuery使用响应Content-Type标题来自动推断出正确的类型。