asp.net-mvc – MVC Model Binding不适用于Kendo Grid

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – MVC Model Binding不适用于Kendo Grid前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在MVC项目中,我有以下视图,其中我使用了Kendo Grid
  1. <%: Html.Kendo().Grid<Milestone>()
  2. .Name("MilestonesGrid")
  3. .Columns(columns =>
  4. {
  5. columns.Bound(p => p.ContractMilestoneID).Hidden();
  6. columns.Bound(p => p.MilestoneSN).Title("Κωδικός οροσήμου");
  7. columns.Bound(p => p.EstimatedDate).Title("Εκτιμώμενη ημερομηνία");
  8. columns.Bound(p => p.RealDate).Title("Πραγματική ημερομηνία");
  9. columns.Bound(p => p.MilestoneDescription).Title("Περιγραφή");
  10. columns.Bound(p => p.Payment).Title("Πληρωμή");
  11. columns.Bound(p => p.PaymentRate).Title("Ποσοστό πληρωμής");
  12. columns.Bound(p => p.IsCompleted).Title("Έχει ολοκληρωθεί");
  13. columns.Command(command =>
  14. {
  15. command.Edit()
  16. .Text("Επεξεργασία")
  17. .CancelText("Ακύρωση")
  18. .UpdateText("Αποθήκευση");
  19.  
  20. command.Destroy()
  21. .Text("Διαγραφή");
  22. });
  23. })
  24. .ToolBar(toolbar => toolbar.Create().Text("Προσθήκη νέου οροσήμου"))
  25. .Editable(editable => editable.Mode(GridEditMode.InLine))
  26. .Sortable()
  27. .Pageable()
  28. .Filterable()
  29. .Resizable(resize => resize.Columns(true))
  30. .DataSource(dataSource => dataSource
  31. .Ajax()
  32. .ServerOperation(true)
  33. .Model(model => model.Id(o => o.ContractMilestoneID))
  34. .Model(model => model.Field(o => o.MilestoneSN))
  35. .Model(model => model.Field(o => o.EstimatedDate))
  36. .Model(model => model.Field(o => o.RealDate))
  37. .Model(model => model.Field(o => o.MilestoneDescription))
  38. .Model(model => model.Field(o => o.Payment))
  39. .Model(model => model.Field(o => o.PaymentRate))
  40. .Model(model => model.Field(o => o.IsCompleted))
  41. .Batch(true)
  42. .Create(create => create.Action("CreateMilestone","Milestones"))
  43. .Read(read => read.Action("DetailsJson","Milestones",new { id = ViewBag.ID }))
  44. .Update(update => update.Action("UpdateMilestone","Milestones"))
  45. .Destroy(delete => delete.Action("DeleteMilestone","Milestones")))
  46. %>

我还有一个控制器,我想在Kendo Grid中保存一个新条目.

  1. [HttpPost]
  2. public ActionResult CreateMilestone([DataSourceRequest] DataSourceRequest request,Milestone milestone)
  3. {
  4. if (milestone != null && ModelState.IsValid)
  5. {
  6. using (TADCEntities database = new TADCEntities())
  7. {
  8. tblSymvaseisOrosima item = new tblSymvaseisOrosima
  9. {
  10. fldEstimatedDate = milestone.EstimatedDate,fldIsCompleted = milestone.IsCompleted,fldMilestoneDescription = milestone.MilestoneDescription,fldMilestoneSN = milestone.MilestoneSN,fldPayment = milestone.Payment,fldPaymentRate = milestone.PaymentRate,fldRealDate = milestone.RealDate,fldStoixeioYpoergouID = milestone.ElementSubProjectID
  11. };
  12.  
  13. database.tblSymvaseisOrosima.Add(item);
  14. database.SaveChanges();
  15.  
  16. return Json(new[] { item }.ToDataSourceResult(request,ModelState));
  17. }
  18. }
  19.  
  20. return View();
  21. // should also return json
  22. }

问题是,即使我在网格中创建新条目并按保存时输入数据,Milestone类型(控制器中的参数)也始终为null.知道怎么做才能在里程碑参数中传递输入的数据?先感谢您

解决方法

正如我在Fiddler中看到的那样,参数是使用模型前缀发布的,因此您必须像这样访问它们:
  1. public ActionResult CreateMilestone([DataSourceRequest] DataSourceRequest request,[Bind(Prefix="models")] List<Milestone> milestons)
  2. {
  3. Milestone milestone = milestons[0];
  4. .
  5. .
  6. .
  7. }

猜你在找的asp.Net相关文章