【问题标题】:asp.net MVC JavaScript call to controllerasp.net MVC JavaScript 调用控制器
【发布时间】:2014-07-03 13:53:20
【问题描述】:

我目前正在开发一个 ASP.Net MVC 项目。 我有一个 JavaScript 函数,它以 XML 字符串作为输入。我想将此发送给控制器。

我使用 AJAX 请求完成了此操作,但在控制器中该字符串为空。

查看:

        function save() {
            var xml = scheduler.toXML();
            alert(xml);

            var url = '@Url.Action("Save", "Home")'

            $.ajax({
                url: url,
                Type: "POST",
                dataType: 'json',
                async: false,
                data: xml,
                contentType: 'application/json; charset=utf-8',
                success: function (data) { alert("OK");},
                error: function (jqXHR, exception) {
                alert('Error message.');
            }
            });

控制器:

 public ActionResult Save(string xml)
    {
        Console.WriteLine(xml);

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

        var engList = new List<object>();
        foreach (var engineer in viewModel.engineers)
        {
            engList.Add(new { key = engineer.ID, label = engineer.Name });
        }
        ViewBag.engineers = engList;

        return View("Index", viewModel);
    }

var xml = scheduler.toXML()

警报(xml):

错误代码(对不起,文字墙):

[HttpRequestValidationException (0x80004005): A potentially dangerous Request.QueryString value was detected from the client (xmlString=&quot;&lt;data&gt;&lt;event&gt;

【问题讨论】:

  • 一切似乎都是XML,但contenttypejson
  • 是的,你的权利,但我相信 scheduler.toXML() 返回一个刺痛。docs.dhtmlx.com/scheduler/api__scheduler_toxml.html
  • 还有一个dataType: "xml" 应该为你设置contentType
  • 将数据类型更改为 XML 时出现错误。

标签: c# javascript asp.net-mvc asp.net-mvc-4 controller


【解决方案1】:

这样命名你的参数:

function save() {
        var xml = scheduler.toXML();
        alert(xml);

        var url = '@Url.Action("Save", "Home")';

        $.ajax({
            url: url,
            Type: "POST",
            dataType: 'json',
            async: false,
            data: { xml: xml},
            contentType: 'application/json; charset=utf-8',
            success: function (data) { alert("OK");},
            error: function (jqXHR, exception) {
            alert('Error message.');
        }
        });

也把这个标签放在你的控制器动作之上:

[ValidateInput(false)]

【讨论】:

  • 不幸的是,当我这样做时,错误消息开始出现,不知道为什么。
  • soory,但我不确定错误是什么,即使在写入之后它也只是说错误:error: function (jqXHR, exception) { alert(exception); }
  • 检查我答案的第二部分
  • 有没有办法在不使用 Ajax 的情况下做到这一点?
  • 你想达到什么目的?
【解决方案2】:

见下面ajax电话:

  $.ajax({
            url: '@Url.Content("~/myaccount/CheckDuplicateEmailAddress")',
            data: { "emailAddress": email },
            async: false,
            type: "post",
            success: success,
            error: error
        });

控制器动作如下。你需要这样发送参数:

data: { "emailAddress": email }

记住区分大小写和双引号:

public bool CheckDuplicateEmailAddress(string emailAddress)
    {
    }

【讨论】:

  • 试过这个,我得到了和上面提到的答案一样的错误!
  • 此警报提供了什么。 var xml = scheduler.toXML();警报(xml);
  • 如果有办法得到错误,它只是一个警告说“错误”,你能告诉我吗?
  • 当我这样做时,它不为空,但我会在一秒钟内发布它
  • 是的,您需要安装类似于 Mozilla 中的 firebug 的工具。在那里你可以看到所有的 javascript 错误。
猜你喜欢
  • 2023-03-28
  • 2015-03-03
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
  • 2017-01-08
  • 1970-01-01
  • 2018-06-18
相关资源
最近更新 更多