【问题标题】:Pass webgrid data back to controller via post asp.net mvc通过 post asp.net mvc 将 webgrid 数据传回控制器
【发布时间】:2014-03-17 21:14:10
【问题描述】:

我是 MVC 新手,想知道如何使用 viewmodel 将整个网格数据在提交按钮单击时立即提交给控制器。

在视图中

@model prjMVC4Training.Models.BookViewModel
@{
    ViewBag.Title = "Index";
    var categories = ViewBag.BookCategories;
    var authors = ViewBag.BookAuthors;
    var grid = new WebGrid(source: Model.BookData, canSort: true, canPage:true);    
}

@using (Html.BeginForm("BookPost", "Book", FormMethod.Post, new { @id = "grid" }))
{
    <h2>Book Index Page</h2>    
    @Html.HiddenFor(m => m.PrimaryKeyID)

    @grid.GetHtml(
        tableStyle: "table",
        alternatingRowStyle: "alternate",
        selectedRowStyle: "selected",
        headerStyle: "header",
        columns: grid.Columns(
            grid.Column("Actions",
                style: "col1",
                canSort: false,
                format: @<text>
                    <button type="button"  class="edit-book display-mode" id="@item.BookID">Edit</button>
                    <button type="button" class="save-book edit-mode" id="@item.BookID">Save</button>
                    <button type="button" class="cancel-book edit-mode" id="@item.BookID">Cancel</button>
                    </text>),
                grid.Column("BookTitle",
                    style: "col2",
                    canSort: true,
                    format: @<text>
                        <span id="dBookTitle" class="display-mode">@item.BookTitle</span>
                        @Html.TextBox("BookData_" + (int)item.BookID + "__BookID", (string)item.BookTitle, new { @class = "edit-mode", size = 45 })
                        </text>),
                grid.Column("AuthorName",
                    header: "Author",
                    style: "col3",
                    canSort: true,
                    format: @<text>
                        <span id="dAuthorName" class="display-mode">@item.AuthorName</span>
                        @Html.DropDownList("AuthorID_" + (int)item.BookID, (ViewBag.BookAuthors as SelectList).Select(option => new SelectListItem
                        {
                            Text = option.Text,
                            Value = option.Value,
                            Selected = option.Value == @item.AuthorID
                        }), new { @class = "edit-mode" })
                        </text>),
                grid.Column("CategoryName",
                style: "col4",
                canSort: true,
                    format: @<text>
                        <span id="dCategoryName" class="display-mode">@item.CategoryName</span>
                        @Html.DropDownList("CategoryID_" + (int)item.BookID, (ViewBag.BookCategories as SelectList).Select(option => new SelectListItem
                        {
                            Text = option.Text,
                            Value = option.Value,
                            Selected = option.Value == @item.CategoryID
                        }), new { @class = "edit-mode" })
                        </text>),
                grid.Column("BookISBN",
                    style: "col5",
                    format: @<text>
                        <span id="dBookISBN" class="display-mode">@item.BookISBN</span>
                        @Html.TextBox("BookISBN_" + (int)item.BookID, (string)item.BookISBN, new { @class = "edit-mode", size = 20 })
                        </text>),
                grid.Column("IsMember",
                    style: "",
                    format: @<text>
                        <span id="dMember" class="display-mode">@item.IsMember</span>
                        <input type="checkbox" id="MemberID_" + (int)item.BookID name="MemberID" @(item.IsMember == true ? "Checked" : null) class="edit-mode"/>
                        </text>)))    
    <button type="submit" value="Save Book Data">Save Book Data</button>
}

在提交按钮上,我想将值传递给控制器​​

[HttpPost]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult BookPost(BookViewModel obj)
{
    ViewBag.BookCategories = new SelectList(BookHelperData.GetBookCategories(), "CategoryID", "CategoryName", "20");
    ViewBag.BookAuthors = new SelectList(BookHelperData.GetAuthors(), "AuthorID", "AuthorName");
    //ViewBag.BookAuthors = BookHelperData.GetAuthorsList();
    var Book = BookHelperData.GetBooks();
    return View(Book);

}

我的 ViewModel 类是这样的-

public class BookViewModel
{
    public int PrimaryKeyID { get; set; }
    public List<Book> BookData { get; set; }
}

【问题讨论】:

    标签: asp.net-mvc webgrid


    【解决方案1】:

    您可以编写一个通用方法,循环网格中的所有数据并将其转换为 json 结构。

    function gridTojson() {
            var json = '{';
            var otArr = [];
            var tbl2 = $('#employeeGrid tbody tr').each(function (i) {
                if ($(this)[0].rowIndex != 0) {
                    x = $(this).children();
                    var itArr = [];
                    x.each(function () {
                        if ($(this).children('input').length > 0) {
                            itArr.push('"' + $(this).children('input').val() + '"');
                        }
                        else {
                            itArr.push('"' + $(this).text() + '"');
                        }
                    });
                    otArr.push('"' + i + '": [' + itArr.join(',') + ']');
                }
            })
            json += otArr.join(",") + '}'
            return json;
        }
    

    现在点击提交按钮,您需要将数据传递给控制器​​。

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

    现在在控制器上序列化数据

    public ActionResult UpdateGridData(string gridData)
            {
                var log = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string[]>>(gridData);     
                return Json("Update Successfully");
            }
    

    这里是post 关于这个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      • 2017-09-30
      • 2016-08-14
      相关资源
      最近更新 更多