【问题标题】:how to consume JSon object from a Razor page that has no headerID's in C# MVC5 Controller如何从 C# MVC5 控制器中没有 headerID 的 Razor 页面使用 JSON 对象
【发布时间】:2023-03-31 04:31:01
【问题描述】:

我已使用此 javascript 转换 WebGrid (C# MVC5) - 我不确定如何使用没有标头的 json 对象。这是我的 WebGrid 创建脚本:

 var grid = new WebGrid(

            rowsPerPage: 50,
            canPage: true,
            canSort: true,
            ajaxUpdateContainerId: "gridcontent");

grid.Bind(
            source: Model,
            autoSortAndPage: true,
            rowCount: Model.Count()
            );

        <div id="gridcontent">
            @grid.GetHtml(
        htmlAttributes: new
        {
            @id = "WebGrid",
            @class = "searchGridView"

        },
             fillEmptyRows: false,
             mode: WebGridPagerModes.All,
             columns: new[] {
            grid.Column(columnName:"ID",header: "Attendee ID", canSort: false),
            grid.Column( columnName:"LName", header:"Last Name"),
            grid.Column( columnName: "FName", header: "First Name"),
            grid.Column("Title"),
            grid.Column("kOrgID", "Org ID"),
            grid.Column("Organization"),
            grid.Column("UpdatedOn","Last Used",format: (item) => string.Format("{0:MMM yyyy}",item.UpdatedOn)),
            grid.Column("City"),
            grid.Column("State"),
            grid.Column("LegalApprovedAtt", "Approve?",
                    format: @<text><input name="Approve"
                                          type="checkbox" value="@item.LegalApprovedAtt" /></text> ),
            grid.Column("",
                header: "Actions",
                format: @<text>
                    @Html.ActionLink("Edit", "Edit" ,new { id=item.ID }) |
                    @Html.ActionLink( "Details","Details", new { id=item.ID })

                </text>
                )
     })
        </div>

所以我得到了下表(注意:没有标题 ID):

<table id="WebGrid" class="searchGridView" data-swhgajax="true" data-swhgcontainer="gridcontent" data-swhgcallback="">
    <thead>
        <tr>
            <th scope="col">
Attendee ID            </th>
            <th scope="col">
<a data-swhglnk="true" href="/Attendees/Modified?sort=LName&amp;sortdir=ASC">Last Name</a>            </th>
            <th scope="col">
<a data-swhglnk="true" href="/Attendees/Modified?sort=FName&amp;sortdir=ASC">First Name</a>            </th>
            <th scope="col">
<a data-swhglnk="true" href="/Attendees/Modified?sort=Title&amp;sortdir=ASC">Title</a>            </th>
            <th scope="col">
<a data-swhglnk="true" href="/Attendees/Modified?sort=kOrgID&amp;sortdir=ASC">Org ID</a>            </th>
            <th scope="col">
<a data-swhglnk="true" href="/Attendees/Modified?sort=Organization&amp;sortdir=ASC">Organization</a>            </th>
            <th scope="col">
<a data-swhglnk="true" href="/Attendees/Modified?sort=UpdatedOn&amp;sortdir=ASC">Last Used</a>            </th>
            <th scope="col">
<a data-swhglnk="true" href="/Attendees/Modified?sort=City&amp;sortdir=ASC">City</a>            </th>
            <th scope="col">
<a data-swhglnk="true" href="/Attendees/Modified?sort=State&amp;sortdir=ASC">State</a>            </th>
            <th scope="col">
<a data-swhglnk="true" href="/Attendees/Modified?sort=LegalApprovedAtt&amp;sortdir=ASC">Approve?</a>            </th>
            <th scope="col">
Actions            </th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>6146</td>
            <td>Kimmel</td>
            <td>Jimmy</td>
            <td>General Funny Guy</td>
            <td>277</td>
            <td>Unite</td>
            <td>Jun 2019</td>
            <td></td>
            <td></td>
            <td><input name="Approve"
                                          type="checkbox" /> </td>
            <td>
<a href="/Attendees/Edit/6146">Edit</a> |
<a href="/Attendees/Details/6146">Details</a>


</td>
        </tr>
 </tbody>
    </table>

我正在使用以下 javascript 将此表转换为 JSON 对象:

<script>
    function gridTojson() {
        var json = '{';
        var otArr = [];


        var tbl2 = $('#WebGrid tbody tr').each(function (i) {
            if ($(this)[0].rowIndex != 0) {
                x = $(this).children();
                var itArr = [];
                //I tried to add the header text here to no avail
                //var tdIndex = x.index() + 1;
                //var $th = $('#WebGrid tr').find('th:nth-child(' + tdIndex + ')');
                x.each(function () {
                    if ($(this).children('input').length > 0) {
                        var checked = $(this).children('input:checked').length
                        //alert(checked);
                        if (checked != 0) { itArr.push('"1"'); }
                        else { itArr.push('"' + $(this).children('input').val() + '"'); }
                    }
                    else {
                       // alert($(this).parents("th").val());
                       // itArr.push('"' + $(this).parents("th").val() + '":');
                        itArr.push('"' + $(this).text() + '"');
                    }
                });
                otArr.push('"' + i + '": [' + itArr.join(',') + ']');
            }
        })
        json += otArr.join(",") + '}'
        return json;
    };





            $('#btnApproveAll').click(function (e) {
                //debugger;
                e.preventDefault();
                var _griddata = gridTojson();
                var url = '@Url.Action("AttMods", "Attendees")';
                $.ajax({
                    url: url,
                    type: 'POST',
                    data: { gridData: _griddata }
                }).done(function (data) {
                    if (data != "") {
                        $('#message').html(data);
                    }
                });
            });

   </script>

我得到了这个 json 对象(没有标题,因为 webgrid 没有标题 ID(这对于格式化和易于设置非常有用,但我想我现在正在为此付费......

我不知道如何在我的控制器中使用json对象(\nEdit |之前的“1”表示复选框已选中:

"{\"0\": [\"6146\",\"Kimball\",\"Jimmy\",\"General Funny Guy\",\"277\",\"Unite\",\"Jun 2019\",\"\",\"\",\"1\",\"\nEdit |\nDetails\n\n                \n\"],\"1\": [\"6147\",\"Hawk\",\"Jack\",\"\",\"547\",\"Painters\",\"Jun 2019\",\"\",\"\",\"on\",\"\nEdit |\nDetails\n\n                \n\"]}"

【问题讨论】:

    标签: c# json asp.net-mvc-5


    【解决方案1】:

    我终于把这个整理出来了。如果有更动态的答案,或者更好的方法,请告诉我!提前致谢。

    if(ModelState.IsValid)
    {
        try
        {
    
            Dictionary <string,string[]> log = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string[]>>(gridData);
    
            foreach (KeyValuePair<string,string[]> keyValue in log)
            {
                if (keyValue.Value[9] == "1")//Update this row based on the checkbox being checked
                {
                    var AttendeeID = keyValue.Value[0];
                    int intAttendeeID = 0;
                    if (int.TryParse(AttendeeID, out intAttendeeID))//Make sure the AttendeeID is valid
                    {
                        var LName = keyValue.Value[1];
                        var FName = keyValue.Value[2];
                        var Title = keyValue.Value[3];
                        var kOrgID = keyValue.Value[4];
                        var Org = keyValue.Value[5];
                        var City = keyValue.Value[7];
                        var State = keyValue.Value[8];
                        var LegalApproval = keyValue.Value[9];
    
    
                        tblAttendee att = db.tblAttendees.Find(Convert.ToInt32(AttendeeID));
                        att.FName = FName;
                        att.LName = LName;
                        att.Title = Title;
                        att.kOrgID = Convert.ToInt32(kOrgID);
                        att.Organization = Org;
                        att.City = City;
                        att.State = State;
                        att.LegalApprovedAtt = Convert.ToBoolean(LegalApproval);
                    }
                }
            }
            db.SaveChanges();
    
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }
    

    您可以避免分配 var,而只需使用 KeyValue.Value[n] 值填充 att 对象,但您明白了。

    【讨论】:

      猜你喜欢
      • 2019-09-21
      • 2017-09-19
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 2020-10-22
      • 2020-02-29
      • 2020-10-01
      • 2018-06-20
      相关资源
      最近更新 更多