0

我正在尝试遵循有关如何使我的 kendo mvc 网格 ajaxified 并能够支持单元格编辑的文档。

我遇到的问题是保存时,我看到网格提出以下请求,这显然不可用。我不熟悉模型前缀的东西,但看起来对象在 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);
                    })
    )

)
4

2 回答 2

0

乍一看,它看起来像,

.Read(read => read.Action("GetAllOrders", "Controller").Data("getAdditionalData"))

您需要输入控制器的实际名称而不是控制器,例如“PersonController”将是“Person”。

编辑-从外观上看,您已经设置了从数据源读取,但没有设置更新,而是尝试在事件中执行此操作。

http://demos.kendoui.c​​om/web/grid/editing-inline.html

我发现不使用内联编辑更容易,而是创建一个模板按钮以重定向到编辑页面,从而使与剑道相关的代码保持简单。

于 2013-04-26T09:34:08.667 回答
0

看起来您的网格是从 MVC 区域内调用的。如果您在 MVC 应用程序中设置了区域,则在使用 Kendo UI 小部件进行调用时引用这些区域总是一个好习惯。

下面假设一个名为“UI”的区域:

.Update(update => update.Action("Update", "Orders", new { Area = "UI" }))
于 2014-06-13T11:53:18.120 回答