我正在尝试按照有关如何使我的kendo mvc网格变得灵活并且能够支持某些单元格编辑的文档。
我遇到的问题是保存,我看到网格发出以下请求,显然不可用。我不熟悉模型前缀的东西,但看起来对象是在URL中正确建模的,每个属性都以& models为前缀,然后是一些哈希,然后是参数名称,然后是值。
为什么这个URL不映射到我的控制器操作方法?
"NetworkError: 404 Not Found -
http://localhost/MySite/UI/Orders/Update
?models%5B0%5D%5BId%5D=18c12470-0ca3-4e9c-b6d7-af1d6120e03f
&models%5B0%5D%5BNumber%5D=231413+
&models%5B0%5D%5BMod%5D=8ccbf70a-f368-434c-8c05-2e2f5278215d
&models%5B0%5D%5BModName%5D=M6G+++++++++++++++++++++++++++++++++++++++++++++++
&models%5B0%5D%5BDescription%5D=M6G+LMU+TTU1200
&models%5B0%5D%5BPart%5D=105442
&models%5B0%5D%5BPartDescription%5D=M6H+TELEMATICS+CONTROL+UNIT
&models%5B0%5D%5BQuantity%5D=20
&models%5B0%5D%5BDeliveryDate%5D=Tue+Apr+30+2013+00%3A00%3A00+GMT-0400+(Eastern+Daylight+Time)&_=1366818145016"
控制器中的Update方法sig如下所示:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Update([Kendo.Mvc.UI.DataSourceRequest] Kendo.Mvc.UI.DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<Order> order)
{
//do update
}
示例Order对象看起来像这样
public class Order
{
public Guid Id { get; set; }
public string Number{ get; set; }
public Guid Mod{ get; set; }
public string ModName{ get; set; }
public string Description { get; set; }
public int Part{ get; set; }
public string PartDescription { get; set; } // View Model Purposes Only
[Required]
[UIHint("QuantityEditor")] //QuantityEditor is the name of the custom editor template
public int Quantity { get; set; }
public DateTime DeliveryDate{ get; set; }
}
这是网格代码ala MVC:
@(Html.Kendo().Grid(Model)
.Name("my-grid")
.Columns(columns =>
{
columns.Bound(m => m.Id)
.Hidden(true)
.HtmlAttributes(new { @class = "some-class" });
columns.Bound(m => m.Mod)
.Hidden(true)
.HtmlAttributes(new { @class = "some-class" });
columns.Bound(m => m.ModName)
.Hidden(true)
.HtmlAttributes(new { @class = "some-class" });
columns.Bound(m => m.Description).HtmlAttributes(new { @class = "some-class" });
columns.Bound(m => m.Part).HtmlAttributes(new { @class = "part can-edit" });
columns.Bound(m => m.PartDescription).HtmlAttributes(new { @class = "can-edit" });
columns.Bound(m => m.DeliveryDate).Format("{0:yyyy-MM-dd}").HtmlAttributes(new { @class = "date can-edit" });
columns.Bound(m => m.Quantity).HtmlAttributes(new { @class = "quantity can-edit" }).FooterTemplate("Total:");
})
.Scrollable(s => s.Height("auto"))
.Editable(editable => editable.Mode(GridEditMode.InCell))
.Events(events => events.DataBound("onDataBound"))
.DataSource(dataSource => dataSource
.Ajax()
.Batch(true)
.Update(update => update.Action("Update", "Orders"))
.Read(read => read.Action("GetAllOrders", "Orders").Data("getAdditionalData"))
.Aggregates(aggregates => { aggregates.Add(p => p.Quantity).Sum(); })
.Model(model =>
{
model.Id(m => m.Id);
model.Field(m => m.Id).Editable(false);
model.Field(m => m.Part).Editable(true);
model.Field(m => m.Quantity).Editable(true);
model.Field(m => m.DeliveryDate).Editable(true);
model.Field(m => m.PartDescription).Editable(true);
})
)
)
答案 0 :(得分:0)
乍一看它看起来像,
.Read(read => read.Action("GetAllOrders", "Controller").Data("getAdditionalData"))
而不是Controller,你需要输入Controller的实际名称,例如“PersonController”将是“Person”。
编辑 - 根据它的外观,你可以设置Read from datasource但不是你的Update,而是尝试在事件中进行。
http://demos.kendoui.com/web/grid/editing-inline.html
我发现更容易不使用内联编辑,而是创建模板按钮以重定向到编辑页面,从而保持与剑道相关的代码简单。
答案 1 :(得分:0)
看起来你的网格是从MVC区域内调用的。如果您在MVC应用程序中设置了区域,那么在使用Kendo UI Widgets进行调用时,最好先引用这些区域。
下面假设一个名为&#34; UI&#34;:
的区域.Update(update => update.Action("Update", "Orders", new { Area = "UI" }))