Почему этот URL-адрес Kendo Grid не соответствует моему методу действия контроллера?

Я пытаюсь следовать документам о том, как сделать мою сетку 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 в контроллере выглядит так:

[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; }
}

Вот код сетки аля 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);
                    })
    )

)

person topwik    schedule 24.04.2013    source источник
comment
Вы можете вставить свой код сетки здесь. Было бы лучше, если бы мы увидели, как вы строите свой URL в сетке.   -  person HaBo    schedule 25.04.2013
comment
@HaBo добавил код сетки. мне удалось найти обходной путь, используя событие «Сохранить». Я запускаю метод на стороне клиента при сохранении, который дает мне объектную модель на стороне клиента, которая только что была обновлена.   -  person topwik    schedule 26.04.2013
comment
Вы уверены в [Bind(Prefix=models)]IEnumerable‹Order› порядке)? Я думаю, что это должно быть публичное обновление ActionResult ([DataSourceRequest] DataSourceRequest request, Order ordObj)   -  person HaBo    schedule 26.04.2013
comment
@HaBo да, я бы подумал так же, но посмотрите на URL-адрес, который я разместил выше. каждая переменная в URL имеет префикс моделей.   -  person topwik    schedule 30.04.2013
comment
Попробуйте несколько точек останова вокруг действий чтения и обновления и посмотрите, какие из них вызываются и что они отображают.   -  person Myzifer    schedule 01.05.2013


Ответы (2)


На первый взгляд это выглядело бы так,

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

Вместо контроллера вам нужно указать фактическое имя контроллера, например, «PersonController» будет «Person».

Изменить. Судя по всему, вы настроили чтение из источника данных, но не обновление, и вместо этого попытались сделать это в событиях.

http://demos.kendoui.com/web/grid/editing-inline.html

Мне проще не использовать встроенное редактирование, а вместо этого создать кнопку шаблона для перенаправления на страницу редактирования, таким образом сохраняя код, связанный с кендо, простым.

person Myzifer    schedule 26.04.2013
comment
правильно, это просто я пытаюсь запутать некоторые вещи ... я просто хотел поставить слово «контроллер» в качестве заполнителя для правильного контроллера. позвольте мне исправить это - person topwik; 26.04.2013
comment
хорошо, опять ты прав. я не размещаю это должным образом. я пошел дальше и сделал вызов обновления в ajax, используя событие Save для вызова метода javascript. я обновил свою сетку до кода, который дает ошибку, которую я пытаюсь решить. - person topwik; 30.04.2013

Похоже, ваша сетка вызывается из области MVC. Если в вашем приложении MVC настроены области, рекомендуется всегда ссылаться на них при совершении вызовов с помощью виджетов пользовательского интерфейса Kendo.

Ниже предполагается область под названием «UI»:

.Update(update => update.Action("Update", "Orders", new { Area = "UI" }))
person piercove    schedule 13.06.2014