Asp.Net 将大量数据从视图发送到控制器

Ste*_*mar 2 javascript c# asp.net ajax asp.net-mvc

我正在开发一个 Asp.net MVC 应用程序。在我的项目中,我使用了一个名为Dhtmlx Scheduler 的第三方 JavaScript 库。

这个库中有一个函数,然后将调度器上的所有数据写入 XML 格式。然后我需要操作这些数据,并写回到<textarea>我的视图页面上。

到目前为止,这就是我所拥有的:

看法:

function save() {
    var url = "/Home/Save"

    var xml = scheduler.toXML();

    $.ajax({
        url: url,
        Type: "POST",
        dataType: 'json',
        async: false,
        data: { xmlString: xml },
        contentType: 'application/json; charset=utf-8',
        success: alert("File Saved in C:\\ Drive as Tasks.xml")
    });
}
Run Code Online (Sandbox Code Playgroud)

控制器:

public ActionResult Save(string xmlString)
{
    XmlDocument doc = new XmlDocument();
    try
    {
        doc.LoadXml(xmlString);
    }
    catch(Exception e)
    {
        Console.WriteLine(e);
    }
    doc.Save(@"C:\\Tasks.xml");

    W6ViewModel viewModel = new W6ViewModel();
    viewModel.engineers = db.W6ENGINEERS.ToList();
    viewModel.tasks = db.W6TASKS.ToList();
    viewModel.skills = db.W6TASKS_REQUIRED_SKILLS1.ToList();
    viewModel.categories = db.W6TASKTYPECATEGORY.ToList();

    gatherInfo(viewModel);

    return View("Index", viewModel);
}
Run Code Online (Sandbox Code Playgroud)

当尝试保存三个事件(Dhtmlx 对象)时,它完美无缺,当尝试向 XML 添加更多数据时,我收到此错误(读取表单 FireBug):

此请求的查询字符串的长度超过了配置的 maxQueryStringLength 值。

任何帮助将不胜感激。谢谢!

萤火虫控制台: 在此处输入图片说明

Dis*_*ile 5

我相信 jQuery.ajax 使用type而不是Type. 这是区分大小写的。如果您查看 Firebug,它正在执行 GET 请求而不是 POST:

$.ajax({
    url: url,
    Type: "POST",
    dataType: 'json',
    async: false,
    data: { xmlString: xml },
    contentType: 'application/json; charset=utf-8',
    success: alert("File Saved in C:\\ Drive as Tasks.xml")
});
Run Code Online (Sandbox Code Playgroud)

应该

$.ajax({
    url: url,
    type: "POST",
    dataType: 'json',
    async: false,
    data: { xmlString: xml },
    contentType: 'application/json; charset=utf-8',
    success: alert("File Saved in C:\\ Drive as Tasks.xml")
});
Run Code Online (Sandbox Code Playgroud)

  • 非常重要:控制器的动作应该用 `HttpPost` 属性修饰 - 否则只会对 `GET` 请求可见。 (2认同)