【问题标题】:Ajax to MVC controller. Not passing parameters unless Ajax followed by alertAjax 到 MVC 控制器。除非 Ajax 后跟警报,否则不传递参数
【发布时间】:2013-12-28 12:29:13
【问题描述】:

我遇到了最奇怪的情况。我有两个 ajax POST。首先,我在将参数传递给控制器​​时遇到了问题,但在某些时候我让它们通过了一些调试,我发现如果我的 ajax 定义后跟警报,我只会将所有值传递给控制器​​。

其中一个:

$.ajax({
    type: 'POST',
    url: '/Contact/IntresseAnmälan/',
    dataType: 'json',
    data: {
        Namn: $('#namn').val(),
        Mail: $('#mail').val(),
        Info: $('#meddelande').val(),
        Telefon: $('#nr').val(),
        IsEnkel: false,
        PassId: function () {
            var url = window.location.pathname;
            var id = url.substring(url.lastIndexOf('/') + 1);
            return id;
        },
        Participanter: getParticipant(),
        ParticipantMail: getParticipantMail()
    },
    traditional: true,
    success: function (result) {
       // window.location.href = '@Url.Action("IntresseAnmälan", "Contact")';
    }
});
alert("Hur sparas dina uppgifter?");

这是我的姓名和邮件获取器。如果用户想要单击一个按钮,则会将表单元素(输入类型邮件和文本)动态添加到表单中,并添加两个输入。然后这些函数返回一个包含表单输入值的数组。

    function getParticipant() {
    var p = [];

    for (var i = 1; i <= participantCount; i++) {
        var name = '#anNamn' + i;
        p[i -1] = $(name).val()
    }

    return p; 
}

function getParticipantMail() {
    var p = [];

    for (var i = 1; i <= participantCount; i++) {
        p[i -1] = $('#anMail' + i).val();
    }

    return p;
}

这是我的控制器。我已经移除了控制器中的主体。它保存到数据库并向管理员发送验证邮件。

    [HttpPost]
    public ActionResult IntresseAnmälan(BokningContainer bokning)
    {
     //Saves to Db and Send a verification mail to admin

    }

如果我在ajax某些参数传递后排除alert,我认为是NamnMail,但大部分没有传递。我很困惑。

另外,ajax 是从 jQuery 将对象传递给控制器​​的唯一方法吗?

【问题讨论】:

  • getParticipantgetParticipantMail是什么异步函数
  • 您能提供您的控制器操作代码吗?
  • 我认为您陷入了非阻塞问题。让我们看看 getParticipant 和 getParticipantMail 的实现。
  • 我已经添加了邮件和姓名获取者的定义。
  • 在我的其他 ajax 定义中,我没有 get 函数,但我仍然有同样的情况。

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


【解决方案1】:

此外,ajax 是将对象传递给控制器​​的唯一方法是 jQuery?

不,你可以使用普通的HTML Form来提交你的数据,你只需要符合控制器中的预期对象Action(应该用HttpPostAttribute装饰) - 有一个模型绑定过程它试图将Request 数据绑定到您的域对象。

【讨论】:

  • 是的,但问题是我想传递字符串数组。如果我只是在表单中定义具有相同名称的变量,它可以工作,但问题是表单的某些部分是动态添加的,并且某些表单元素的 id:s 不是静态的。所以我需要使用 javascript 函数来创建一个数组并将其放入一个对象中。但我想知道是否有任何其他方法可以将该自定义对象传递给具有上述定义的控制器。(我尝试使用参数,但它不起作用)。
【解决方案2】:

您不需要使用 jQuery 传递每个字段的值。相反,您可以创建一个要发布其数据的表单:

<form id="frmTest">
... add input types here
</form>

您可以使用 $('#frmTest').serialize() 方法将表单数据传递给控制器​​

$.ajax({
            type: "POST",
            data: $('#frmTest').serialize(),
            url: "url",
            dataType: "json",
            success: function (data) { alert('worked!'); },
            error: function (data) {
                alert('error');
            }
        });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 2015-04-03
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多