2012-12-06 33 views
8

在MVC项目中,我有以下看法在这里我使用剑道电网MVC模型绑定上剑道电网不工作

<%: Html.Kendo().Grid<Milestone>() 
       .Name("MilestonesGrid") 
       .Columns(columns => 
       { 
        columns.Bound(p => p.ContractMilestoneID).Hidden(); 
        columns.Bound(p => p.MilestoneSN).Title("Κωδικός οροσήμου"); 
        columns.Bound(p => p.EstimatedDate).Title("Εκτιμώμενη ημερομηνία"); 
        columns.Bound(p => p.RealDate).Title("Πραγματική ημερομηνία"); 
        columns.Bound(p => p.MilestoneDescription).Title("Περιγραφή"); 
        columns.Bound(p => p.Payment).Title("Πληρωμή"); 
        columns.Bound(p => p.PaymentRate).Title("Ποσοστό πληρωμής"); 
        columns.Bound(p => p.IsCompleted).Title("Έχει ολοκληρωθεί"); 
        columns.Command(command => 
         { 
          command.Edit() 
            .Text("Επεξεργασία") 
            .CancelText("Ακύρωση") 
            .UpdateText("Αποθήκευση"); 

          command.Destroy() 
            .Text("Διαγραφή"); 
         }); 
       }) 
       .ToolBar(toolbar => toolbar.Create().Text("Προσθήκη νέου οροσήμου")) 
       .Editable(editable => editable.Mode(GridEditMode.InLine)) 
       .Sortable() 
       .Pageable() 
       .Filterable() 
       .Resizable(resize => resize.Columns(true)) 
       .DataSource(dataSource => dataSource 
        .Ajax() 
        .ServerOperation(true) 
        .Model(model => model.Id(o => o.ContractMilestoneID)) 
        .Model(model => model.Field(o => o.MilestoneSN)) 
        .Model(model => model.Field(o => o.EstimatedDate)) 
        .Model(model => model.Field(o => o.RealDate)) 
        .Model(model => model.Field(o => o.MilestoneDescription)) 
        .Model(model => model.Field(o => o.Payment)) 
        .Model(model => model.Field(o => o.PaymentRate)) 
        .Model(model => model.Field(o => o.IsCompleted)) 
        .Batch(true) 
        .Create(create => create.Action("CreateMilestone", "Milestones")) 
        .Read(read => read.Action("DetailsJson", "Milestones", 
         new { id = ViewBag.ID })) 
        .Update(update => update.Action("UpdateMilestone", "Milestones")) 
        .Destroy(delete => delete.Action("DeleteMilestone", "Milestones"))) 
%> 

而且我有一个控制器在这里我想保存在剑道一个新条目格。

[HttpPost] 
    public ActionResult CreateMilestone([DataSourceRequest] DataSourceRequest request, 
     Milestone milestone) 
    { 
     if (milestone != null && ModelState.IsValid) 
     { 
      using (TADCEntities database = new TADCEntities()) 
      { 
       tblSymvaseisOrosima item = new tblSymvaseisOrosima 
       { 
        fldEstimatedDate = milestone.EstimatedDate, 
        fldIsCompleted = milestone.IsCompleted, 
        fldMilestoneDescription = milestone.MilestoneDescription, 
        fldMilestoneSN = milestone.MilestoneSN, 
        fldPayment = milestone.Payment, 
        fldPaymentRate = milestone.PaymentRate, 
        fldRealDate = milestone.RealDate, 
        fldStoixeioYpoergouID = milestone.ElementSubProjectID 
       }; 

       database.tblSymvaseisOrosima.Add(item); 
       database.SaveChanges(); 

       return Json(new[] { item }.ToDataSourceResult(request, ModelState)); 
      } 
     } 

     return View(); 
     // should also return json 
    } 

的问题是里程碑式(控制器参数)总是空,即使当我创建的网格和按保存一个新的项目我输入数据。任何想法为了在里程碑参数中传递输入的数据要做什么?谢谢你在前进

+1

你的开发人员工具是什么张贴到服务器检查? –

+1

@BehnamEsmaili这是我在小提琴手中看到的。 http://imageshack.us/f/846/28278518.png/ –

+1

在您的操作中放入一个FormCollection类型的参数,并检查它是否有您期望的键。 –

回答

11

正如我在Fiddler中的参数看到与models前缀发布,所以你应该这样访问他们:

public ActionResult CreateMilestone([DataSourceRequest] DataSourceRequest request, 
    [Bind(Prefix="models")] List<Milestone> milestons) 
{ 
    Milestone milestone = milestons[0]; 
    . 
    . 
    . 
} 
+3

是的,这是正确的。这是因为网格的'.Batch(true)'设置所必需的。该解决方案也在[kendo ui documentation]中描述。(http://docs.kendoui.c​​om/getting-started/using-kendo-with/aspnet-mvc/helpers/grid/batch-editing) – nemesv