在ASP应用程序中为ajax请求序列化CSV文件

时间:2017-02-23 13:35:04

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

我有一个由Kendo组合框和Kendo文件上传组成的表单:

@using (Html.BeginForm("Methode", "controller", FormMethod.Post))
{
    <p> Select country </p>
    @(Html.Kendo().DropDownList().Name("country")
        .DataTextField("Text").DataValueField("Value")
        .DataSource(source => { source.Read(read => {
            read.Action("GetMonth", "BudgetStage");
        });
    }))
    <p> Select a .CSV file: </p>
    @(Html.Kendo().Upload()
        .Name("files")
        .HtmlAttributes(new { accept = ".csv" })
    )
    <input type="submit" value="Submit" class="k-button k-primary" />
    <input type="button" value="Ajax" class="k-button k-primary" onclick="postData(this) 
}

这是我的C#控制器代码:

public JsonResult methode(IEnumerable<HttpPostedFileBase> files, string country)
{
    return Json("It's OK !", JsonRequestBehavior.AllowGet);
}

当我单击提交按钮,控制器接收文件和字符串值但我需要从我的页面显示Json返回值时,这是有效的。

为此,我使用这个ajax函数:

function postData(button) {
    var form = $(button).parents('form');
    if (form.kendoValidator().data("kendoValidator").validate()) {
        $.ajax({
            type: "POST",
            url: form.attr('action'),
            data: form.serialize(),
            error: function (xhr, status, error) {
                alert(error);
            },
            success: function (response) {
                alert(response);
            }
        });
        return false;
    }
    return false;
}

当我点击Ajax按钮时,后端方法被调用,返回Json值,我的JS代码显示它。 问题是我收到字符串值但没有收到选定的CSV文件(null)。

如何发送文件和字符串并显示返回的Json值?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

问题是form.serialize()在这种情况下并不真正起作用。使用kendo它不应该与ASP.NET MVC + JavaScript不同,所以基本上this可以帮助你。