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

时间:2014-07-21 17:10:26

标签: c# javascript 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")
    });
}

控制器:

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);
}

当试图保存三个事件(Dhtmlx对象)时,它可以完美地工作,当我尝试向XML添加更多数据时,我得到了这个错误(阅读表单FireBug):

  

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

非常感谢任何帮助。 谢谢!

Firebug控制台: enter image description here

3 个答案:

答案 0 :(得分:4)

我相信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")
});

应该是

$.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")
});

答案 1 :(得分:1)

Grr我还不能发表评论,我似乎记得你传递过一个原始值

data: xml 

而不是

data : { xmlString: xml }

答案 2 :(得分:-1)

已在此帖中解释 - &gt; request exceeds the configured maxQueryStringLength when using [Authorize]

您应该更改web.config中的配置设置,以允许更多的默认值的2048字符。

所以基本上你需要改变 <httpRuntime maxRequestLength = "" maxQueryStringLength =""> 到你认为可以接受的数字。

修改:您是否尝试将Type: "POST"更改为type: "POST"? 因为javascript是区分大小写的语言。

对于无效的Json原语,请尝试:

    $.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")
        });