2

我正在尝试通过 jQuery 的 ajax 调用发送一些数据。我的问题是:如何在我的Insert.cshtml文件中获取这个 JSON 数组?我尝试过Request["rows"],Request[0][rows]等,但没有任何成功。

在这里,我要发送的数据是这样的(多行表单数据):

[
    {
        "sl": "1",
        "tname": "Gardening",
        "ttype": "4",
        "tduration": "12"
    },
    {
        "sl": "2",
        "tname": "Nursing",
        "ttype": "4",
        "tduration": "45"
    }
]

jQuery代码:

$.ajax({
    type: "POST",
    url: "/Insert",
    data: rows,
    contentType: "application/json",
    success: function (data, status) {
        alert(status);
    },
    error: function (xhr, textStatus, error) {
        var errorMessage = error || xhr.statusText;
        alert(errorMessage);
    }
});

更新:jsfiddle 中的部分演示- http://jsfiddle.net/rafi867/gprQs/8/

4

3 回答 3

1

我试图模拟您在 App_Code 中创建 Sample.cs 类的问题:

public class Sample
{
    public string sl { get; set; }
    public string tname { get; set; }
    public string ttype { get; set; }
    public string tduration { get; set; }
}

现在您的 Insert.cshtml 文件应如下所示:

@{
    var sample = new Sample[]{
    new Sample{ sl = "1", tname = "Gardening", ttype = "4", tduration = "12" },
    new Sample{ sl = "2", tname = "Nursing", ttype = "4", tduration = "45" }
    };
    Json.Write(sample, Response.Output);
}

保存 Sample 对象的文件(ReadSample.cshtml?)应该是:

<!DOCTYPE html>

<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="~/Scripts/jquery-1.4.2.min.js" type="text/javascript"></script>
        <script type="text/javascript">
            $.getJSON('/Insert', function (sample)
            {
                var custList = "";
                $.each(sample, function (index, obj) {
                        custList += "<li>" + obj.sl + " - " + obj.tname + 
                                " - " + obj.ttype + " - " + obj.tduration + "</li>";
                })
                $("#list").html("<ul>" + custList + "</ul>")
            })
        </script>
    </head>
    <body>
        <div id="list"></div>
    </body>
</html>

在我的示例中,我已经阅读了 objects 数组

$.getJSON('/Insert', function (sample)

并创建了一个无序列表来显示其内容

$.each(sample, function (index, obj) {
        custList += "<li>" + obj.sl + " - " + obj.tname + 
                " - " + obj.ttype + " - " + obj.tduration + "</li>";
})
$("#list").html("<ul>" + custList + "</ul>")

我希望这会有所帮助。

于 2012-12-18T13:39:54.497 回答
0

我已经放了一个示例代码来展示如何使用 jquery 和 css 在网页上显示数组项。通过使用这个尝试理解这个概念,然后将它应用到你的场景中。

HTML

 <div class="dialog" id="unpaid-dialog" data-width="550" data-title="Checkout">
        <ul>
            <li id="serviceAndRetailDetails" style="text-align: left;"></li>
        </ul>
    </div>

jQuery

<script type="text/javascript">


    var toBePaidItems = new Array();//create a array
    var make = "";

    $.ajax({
        type: "GET",
        url: "/Portal/GetServiceAndRetailSalesDetails",
        dataType: 'json',
        contentType: "application/json; charset=UTF-8",
        data: { invoiceOrSaleId: invoiceOrSaleId, providerKey: providerKey },
        success: function (response) {
            make = "<table id='tblPayment'>";
            toBePaidItems = [];

            $.each(response, function (index, sr) {

                make += "<tr id=" + sr.AllocationOrInvoiceOrSaleId + " class=" + sr.Class + ">" + "<td style='padding-right:100px'>" + sr.Name + "</td><td class='colTotal' style='padding-right:45px'>" + '$ ' + sr.Price.toFixed(2) + "</td><td></tr>";

                //insert into array
                toBePaidItems.push(sr.AllocationOrInvoiceOrSaleId);
            });

            make += "</table>";
            $("#serviceAndRetailDetails").html(make);
        }
    });

</script>

控制器动作方法

[HttpGet]
public JsonResult GetServiceAndRetailSalesDetails(Guid invoiceOrSaleId, string providerKey)
        {

            var items = new List<CheckOutServiceAndRetailItem>();

            var serviceDetails = Repository.GetAllPayableItems(invoiceOrSaleId).ToList();

            foreach (var s in serviceDetails)
            {
                var item = new CheckOutServiceAndRetailItem
                {
                    AllocationOrInvoiceOrSaleId = s.Allocation.AllocationId,
                    Name = s.Allocation.Service.Name,
                    Price = s.LatestTotal,
                    Class = s.Allocation.Service.IsAnExtra,
                };
                items.Add(item);
            }

            return Json(items, JsonRequestBehavior.AllowGet);
        }

阵列输出

在此处输入图像描述

如何在此处操作数组

希望这会对您有所帮助。

于 2012-12-17T16:12:51.190 回答
0

data 参数旨在将名称-值对映射到查询字符串参数,正如您可以从文档中得知的那样:

数据

要发送到服务器的数据。如果还不是字符串,则将其转换为查询字符串。它附加到 GET 请求的 url。请参阅 processData 选项以防止此自动处理。对象必须是键/值对。如果 value 是一个数组,jQuery 会根据传统设置的值(如下所述)序列化具有相同键的多个值。

如果您继续阅读该.param()方法的文档,这应该可以帮助您了解您的请求发生了什么以及 jQuery 如何将您的对象发送到服务器。

您可能只需要在对象中命名您的对象/数组,data以便您可以在对象中引用它们Request.Forms

于 2012-12-17T17:36:34.973 回答