【问题标题】:Values not going to controller method using Ajax Call值不会使用 Ajax 调用传递给控制器​​方法
【发布时间】:2015-08-24 15:15:59
【问题描述】:

我正在使用MVC 4 并希望使用Ajax Callcontroller 方法发送一个表单和一些其他值,但在努力尝试之后我无法做到这一点。请查看下面的代码并指导我我的代码中的一些增强功能。

我的脚本代码:

 $(document).ready(function () {

           var ids = [];
        $("#btnproceed").click(function () {
            debugger;
            //   $("div[class^='apple-']")

            $("div[class^='dvDynamic_']").each(function () {
                debugger;


                var pids = $(this).text();

                ids.push(pids);

            });

            ids = [];
 });

序列化和发送的表单代码:

          <form id="customerform">
            <div id="customerdetails">
                <label>Your Information</label><br />

                @*@for (int i = 0; i < Model.Orders.Count; i++) {*@
                @Html.TextBoxFor(m => m.Orders.Customer, new { @placeholder = "Enter Your Full Name" })
                @Html.ValidationMessageFor(m => m.Orders.Customer)
                @Html.TextBoxFor(m => m.Orders.Phone, new { @placeholder = "Enter Your Cell Number" })
                @Html.ValidationMessageFor(m => m.Orders.Phone)
                @Html.TextAreaFor(m => m.Orders.Address, new { @rows = 3, @cols = 2, @style = "width:300px;", @placeholder = "Enter Your  Complete Delivery Address" })
                @Html.ValidationMessageFor(m => m.Orders.Address)


                <input id="btnback" type="button" value="Back" /> <input id="btnsubmit" type="button" value="Submit" />  @*<input id="submit" type="submit" value="Save" />*@

            </div>
        </form>

我的最终提交按钮的代码:

       $('#btnsubmit').click(function () {

         debugger;


            var form = [{ "name": "customerinfo", "value": JSON.stringify($('#customerform')) }];
            var data = JSON.stringify({
                'products': ids,
                'customerinfo': form

            });

            $.ajax({

                type: "POST",
                url: "@Url.Action("GetIds", "Store")",
                data: data,
                contentType: "application/json; charset=utf-8",

            success: function (r) {
                alert(r.d);
            }
        });
});

以及controller中我的接收方式代码

 public JsonResult GetIds(string products, string customerinfo)
 {
 }

控制器方法中的值将变为空

【问题讨论】:

  • 请帮助解决这个问题
  • 为什么要声明一个数组ids = [];,将它填充到$.each() 中并将其重置为一个空数组(第一个脚本的最后一行)?你真正想发布什么?表单和额外的值数组?
  • @StephenMuecke 是的,我想在数组 ids 中发布一个表单和值,这将来自上一个按钮单击。获取 ids [] 值的方法是否正确?
  • 您的第一个脚本将其重置为空数组。您应该发回您的模型,而不是字符串。您在视图中声明的模型是什么,即@model ???
  • @StephenMuecke 模型 ProductOrderViewModel

标签: jquery ajax asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

您可以序列化您的表单并向其附加其他数据

var data = $('form').serialize() + '&' + $.param({ 'products': ids }, true);
var url = '@Url.Action("GetIds", "Store")';
$.post(url, data, function(r) { alert r.Id; });

并将您的方法更改为

public JsonResult GetIds(ProductOrderViewModel  model, string[] products)

但是,您首先脚本会初始化一个新数组 (var ids = [];),向其中添加对象,然后将其重置为一个空数组(代码的最后一行是 ids = [];)。建议您只需使用var ids = []; ids.push('abc'); ids.push('def'); 进行初始测试即可。

【讨论】:

  • 亲爱的值以这种方式出现,但如何修改以从第一次按钮单击的 ids[] 脚本中获取值
  • 是的,它绑定正确..但我想获取 ids[] 值,我从第一个按钮单击填充数组。我该怎么做
  • 至于ids——只需删除最后一行代码——ids = [];。但是您的代码无论如何都表明您的设计存在问题-您只是获得了不可编辑的元素的.text(),因此这意味着您只需发回您在控制器中已经知道的数据。
  • 实际上我正在获取整个字符串并旨在在后端拆分它以从该字符串中获取 id ....通过删除最后一行 ids = []; .each 函数将不起作用,只有最后一个推入数组的值会在 ids 中
  • 是的,它会起作用的。您是否尝试过var ids = []; ids.push('abc'); ids.push('def'); - 在POST 方法中,产品将是["abc", "def"]。在调用$.post() 方法之前,您需要调试脚本并检查Ids 的实际值。我不确定您的 $.each() 实际在做什么以及它与您的 html 的关系,因此很难帮助您解决这个问题。您需要向机器人提出更详细的新问题:)
【解决方案2】:

您需要构建一个更复杂的模型来绑定表单数据。像这样的:

public JsonResult GetIds(InputModel model)
{

}

public class InputModel
{
    public string[] Products { get; set; }
    public CustomerInfoModel CustomerInfo { get; set; }
}

public class CustomerInfoModel
{
    public string Name { get; set; }
    public string Value { get; set; }
}

您可以进行一些重构并跳过 JSON.stringify($('#customerform')) 部分,而是将模型与您的表单匹配。

【讨论】:

  • 亲爱的你的意思是其他一切都好?
  • 我假设您发送到端点的 ajax 帖子是正确的。否则你需要在这里发布json请求。
  • 请提出其他解决方案,因为它不起作用
猜你喜欢
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 2018-01-08
  • 1970-01-01
相关资源
最近更新 更多