1

MVC 3 アプリに剣道グリッドを実装しようとしています。バッチ編集に興味があります。ビューからコントローラ アクション メソッドにバッチ データを送信する必要があります。

ビュー用のコードは次のとおりです。

<!DOCTYPE html>
<html>
<head>
<title>
    This is Home!!
</title>

<link href="../../Content/kendo/2013.1.319/kendo.common.min.css" rel="stylesheet" />

<link href="../../Content/kendo/2013.1.319/kendo.metro.min.css" rel="stylesheet" />
<script src="../../Scripts/jquery-2.0.2.min.js"></script>
<script src="../../Scripts/kendo/2013.1.319/kendo.web.min.js"></script>

<script type="text/javascript">


    var dataSource = new kendo.data.DataSource({
        schema: {
            model: {
                id: "EmployeeID",
                fields: {
                    EmployeeID: { editable: false, nullable: true },
                    EmployeeName: { validation: { required: true } }

                }
            }
        },
        transport: {
            read: {
                url: "/Home/GetData",
                type: "GET"
            },
            update: {
                url: "/Home/Update",
                type: "POST",
                contentType: 'application/json'
            },
            destroy: {
                url: "/Home/Destroy",
                type: "POST"
            },


            create: {
                url: "/Home/Create",
                type: "POST",
                contentType: 'application/json'
            },


            pageSize: 20,


            parameterMap: function (options, operation) {
                if (operation !== "read" && options.models) {
                    return { models: kendo.stringify(options.models) };
                }
            }
        }

    });





    $(document).ready(function () {


        $("#grid").kendoGrid({
            dataSource: dataSource,
            navigatable: true,
            pageable: true,
            height: 430,
            sortable: true,
            toolbar: ["create", "save", "cancel"],
            columns: [

                { field: "EmployeeID", title: "Employee ID", width: 110 },
                { field: "EmployeeName", title: "Employee Name", width: 110 },

                { command: "destroy", title: "Delete", width: 90 }],
            editable: true,
            selectable: "multiple row",
            groupable: true,
            navigatable: true
        });
    });



</script>

</head>
<body>

<div id="example" class="k-content">
    <div id="grid"></div>

</div>

</body>
</html>

コントローラーコード:

 [HttpPost]
 public JsonResult Update(List<Employee> model) //Parameter gets no data.
 {
     var obj = new Employee();
     //return View();
     return Json(obj);
 }

//Parameter gets no data.
[HttpPost]
public ActionResult Create(List<Employee> model) 
{
   return View("Index");
}

私が間違っていなければ、パラメーター マッピングまたはアクション メソッドのシグネチャで何か間違ったことをしているのですが、何がわかりませんか? 助けてください。ありがとう。

4

3 に答える 3

2

あなたが間違っているのは、バッチである必要があるとは言わなかったので、編集が終了するとすぐに実際にサーバーにデータを送信しているEmployeeName(編集モードを終了する)parameterMap、非バッチで送信すると関数が正しくないことですモードがないためmodel(options直接データのみ)。

したがって、定義に追加batch: trueするか (モードに移行する場合):DataSourebatch

var dataSource = new kendo.data.DataSource({
    batch: true,
    schema: {
        model: {
            id: "EmployeeID",
            fields: {
                EmployeeID: { editable: false, nullable: true },
                EmployeeName: { validation: { required: true } }

            }
        }
    },
    ...

またはparameterマップを return に変更しますoptions(を使いたくない場合のみbatch):

parameterMap: function (options, operation) {
    if (operation !== "read") {
        return options;
    }
}
于 2013-07-07T09:28:08.500 に答える
0

私は同じ問題を抱えていて、ウェブで見つけたすべてのオプションを試しましたが、私のために働いたのはこれだけでした

public ActionResult Products_Update([DataSourceRequest]DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<ProductViewModel> products)
{
    // Will keep the updated entitites here. Used to return the result later.
    var entities = new List<Product>();
    if (ModelState.IsValid)
    {
        using (var northwind = new NorthwindEntities())
        {
            foreach (var product in products)
            {
                // Create a new Product entity and set its properties from the posted ProductViewModel.
                var entity = new Product
                {
                    ProductID = product.ProductID,
                    ProductName = product.ProductName,
                    UnitsInStock = product.UnitsInStock
                };
                // Store the entity for later use.
                entities.Add(entity);
                // Attach the entity.
                northwind.Products.Attach(entity);
                // Change its state to Modified so Entity Framework can update the existing product instead of creating a new one.
                northwind.Entry(entity).State = EntityState.Modified;
                // Or use ObjectStateManager if using a previous version of Entity Framework.
                // northwind.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
            }
            // Update the entities in the database.
            northwind.SaveChanges();
        }
    }
    // Return the updated entities. Also return any validation errors.
    return Json(entities.ToDataSourceResult(request, ModelState, product => new ProductViewModel
    {
        ProductID = product.ProductID,
        ProductName = product.ProductName,
        UnitsInStock = product.UnitsInStock
    }));
}

この例は、Telerik サイトhttp://docs.telerik.com/aspnet-mvc/helpers/grid/editing/batch-editingから取得しました

于 2016-12-06T18:22:55.630 に答える