2013-05-25 4 views
1

У меня проблемы с AJAX POST. Я определяю, где я хочу, чтобы вызов AJAX был опубликован, но он публикуется в другом месте. Пожалуйста помоги.AJAX вызов сделан неправильным URL. Что дает?

Я использую сетку MVC Telerik. Это не имеет значения, если вы не знакомы с ним. Я следую примеру на http://demos.telerik.com/aspnet-mvc/razor/grid/editingbatch

Из этого примера, важные части этой сетки головоломки включают в себя:

.Editable(editing => editing.Mode(GridEditMode.InCell)) 

Кроме того, из этого примера, определяющий URL для вызова AJAX:

.DataBinding(dataBinding => dataBinding.Ajax() 
     .Select("_SelectContactsBatchEditing", "Ajax", new {FirstName = @ViewData["FirstName"], LastName = @ViewData["LastName"]}) 
     .Update("_SaveContactsBatchEditing", "Ajax", new {FirstName = @ViewData["FirstName"], LastName = @ViewData["LastName"]}) 
    ) 

Для методов Select() и Update() первым параметром является Action, а вторым параметром является контроллер. У меня есть третий необязательный параметр, который содержит другие данные для отправки обратно в сообщение.

Моя сетка - это Master/Detail. Я вынул часть «Детали», и у меня все еще проблема. Я даю вам всю мою сетку. На данный момент, пожалуйста, давайте сосредоточимся на части мастера.

@(Html.Telerik().Grid<ContactView>() 
    .Name("ContactsGrid") 
    .Columns(columns => 
    { 
     columns.Bound<int>(c => c.Id).Width(65).ReadOnly(); 
     columns.Bound<string>(c => c.FirstName).Width(100); 
     columns.Bound<string>(c => c.LastName).Width(100); 
     columns.Bound<string>(c => c.Phone).Width(120); 
     columns.Bound<string>(c => c.Street).Width(200); 
     columns.Bound<string>(c => c.City).Width(100); 
     columns.Bound<string>(c => c.Province).Width(50).Title("Prov"); 
     columns.Bound<string>(c => c.PostalCode).Width(80).Title("PC"); 
     columns.Bound<string>(c => c.Email).Width(100); 
     columns.Bound<bool>(c => c.OkToContact).Width(40).Title("Ok") 
      .ClientTemplate("<input type='checkbox' disabled='disabled' name='OkToContact' <#=OkToContact? checked='checked' : '' #> />"); 
     columns.Command(commands => 
     { 
      commands.Delete(); 
     }).Width(100); 
    }) 
    .DetailView(details => details.ClientTemplate(
      Html.Telerik().Grid<DonationView>() 
       .Name("Donations_<#= Id #>") 
       .Resizable(resizing => resizing.Columns(true)) 
      .Editable(editing => editing.Mode(GridEditMode.InCell).DefaultDataItem(new DonationView(){Description = "Internal Cause"})) 
       .DataKeys(d => d.Add<int>(a => a.Id).RouteKey("Id")) 
       .Columns(columns => 
       { 
        columns.Bound(o => o.Id).Width(65).ReadOnly(); 
        columns.Bound(o => o.Description).Width(400); 
        columns.Bound(o => o.Amount).Width(80); 
        columns.Bound(o => o.Date).Format("{0:d}"); 
       }) 
       /*.ClientEvents(events => events.OnRowDataBound("cause_onRowDataBound"))*/ 
       .DataBinding(dataBinding => dataBinding.Ajax() 
        .Select("_SelectDonationsHierarchyBatchEditing", "Ajax", new { ContactID = "<#= Id #>" }) 
        .Update("_SaveDonationsHierarchyBatchEditing", "Ajax", new {ContactID = "<#= Id #>"}) 
       ) 
       .Sortable() 
       .ToolBar(commands => { 
        commands.Insert(); 
        commands.SubmitChanges(); 
       }) 
       /*.Filterable()*/ 
       .ToHtmlString() 
    )) 
    .DataBinding(dataBinding => dataBinding.Ajax() 
     .Select("_SelectContactsBatchEditing", "Ajax", new {FirstName = @ViewData["FirstName"], LastName = @ViewData["LastName"]}) 
     .Update("_SaveContactsBatchEditing", "Ajax", new {FirstName = @ViewData["FirstName"], LastName = @ViewData["LastName"]}) 
    ) 
    .Resizable(resizing => resizing.Columns(true)) 
    //.Pageable(paging => paging.PageSize(25)) 
    .Editable(editing => editing.Mode(GridEditMode.InCell)) 
    .DataKeys(d => d.Add<int>(a => a.Id).RouteKey("Id")) 
    .Scrollable(scrolling => scrolling.Height(500)) 
    .ToolBar(commands => { 
     commands.Insert(); 
     commands.SubmitChanges(); 
    }) 
    //.HtmlAttributes(new { style = "width: 1200px" }) 
    .Sortable() 
    ) 

Select() Мой метод требует правильно, однако мой Update() метод не делает. Он просто отправляется на ту же страницу, на которой находится сетка. У меня была эта работа, но я не потрудился проверить (глупо) и сломал ее несколько дней спустя. Никакое количество Ctrl + Z не помогло мне.

Это действие в моем контроллере Ajax. Детали удалены, поскольку они не имеют значения. Метод просто не вызван.

[GridAction] 
     [AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult _SaveContactsBatchEditing([Bind(Prefix = "inserted")]IEnumerable<ContactView> insertedContacts, 
      [Bind(Prefix = "updated")]IEnumerable<ContactView> updatedContacts, 
      [Bind(Prefix = "deleted")]IEnumerable<ContactView> deletedContacts, string FirstName, string LastName) 
     { 
      ISession session = SessionManager.OpenSession(); 
      ContactProvider cp = new ContactProvider(session); 
      if (insertedContacts != null) 
      { 
       //stuff 
      } 
      if (updatedContacts != null) 
      { 
       //stuff 
      } 
      if (deletedContacts != null) 
      { 
       //stuff 
      } 

      IList<ContactView> Contacts = new List<ContactView>(); 
      ContactViewProvider Provider = new ContactViewProvider(SessionManager.OpenSession()); 
      Contacts = Provider.GetContactsByName(FirstName, LastName); 
      //return View(new GridModel(Contacts)); 
      return new LargeJsonResult 
      { 
       MaxJsonLength = int.MaxValue, 
       JsonRequestBehavior = System.Web.Mvc.JsonRequestBehavior.AllowGet, 
       Data = new GridModel<ContactView> 
       { 
        Data = Contacts 
       } 
      }; 
     } 

При нажатии на кнопку Сохранить на панели инструментов моей сетке, я могу использовать Firebug, чтобы увидеть метод Select() делает правильный вызов AJAX, но метод Update() не: (См http://i.stack.imgur.com/GPCS6.png)

В этом image первый адрес сообщения соответствует значениям, переданным в мой метод Select(). Второй почтовый URL не соответствует моему методу Update().

Что здесь происходит? Заранее спасибо

ответ

0

Так получилось, что нет ничего плохого в том, что я сделал. Проект MVC каким-то образом перепутался.

Я создал проект с выбросом, чтобы попытаться воспроизвести проблему, но я не мог - работа была выбрана. Таким образом, я удалил проект MVC в своем решении и скопировал фрагменты в новый проект один за другим и, конечно же, он работает. Я понятия не имею, как это стало разочарованным в первую очередь, но по крайней мере проблема исправлена. Для тех, кто имеет ту же проблему, я предлагаю вам попробовать это!

Смежные вопросы