2013-05-25 2 views
1

AJAX POST에 문제가 있습니다. 나는 AJAX 호출을 게시 할 위치를 정의하고 있지만 다른 곳에 게시하고 있습니다. 도와주세요.AJAX가 잘못된 URL로 호출됩니다. 뭐라 구요?

MVC Telerik Grid를 사용하고 있습니다. 그것은 당신이 그것에 익숙하지 않은 경우에 probalby 중요하지 않습니다. 나는 그 예에서 http://demos.telerik.com/aspnet-mvc/razor/grid/editingbatch

의 예를 다음있어,이 그리드 퍼즐에 중요한 조각은 다음과 같습니다 : 그 예에서 또한

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

, AJAX 호출에 대한 URL 정의 :

.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이고 두 번째 매개 변수는 Controller입니다. 게시물에 다시 보낼 다른 데이터가 들어있는 세 번째 선택적 매개 변수가 있습니다.

내 표는 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 
       } 
      }; 
     } 

내 그리드의 도구 모음에서 저장 버튼을 클릭하면, 나는 Select() 방법을보기 위해 불을 지르고를 사용할 수있는 적절한 AJAX 호출을하지만 Update() 방법은하지 않는이에서

(http://i.stack.imgur.com/GPCS6.png 참조) image 첫 번째 게시 URL은 내 Select() 메소드에 전달 된 값과 일치합니다. 두 번째 게시 url은 내 Update() 메소드와 일치하지 않습니다.

여기 무슨 일 이니? 미리 감사드립니다.

답변

0

그래서 내가 한 일에는 아무런 문제가 없습니다. MVC 프로젝트가 어떻게 든 엉망이되었습니다.

문제를 재현하려는 시도를 만들었지 만 할 수 없었습니다. 그래서 내 솔루션에서 MVC 프로젝트를 삭제하고 조각을 새로운 프로젝트에 하나씩 복사하고 충분히 확실하게 작동합니다. 나는 그것이 처음에는 어떻게 혼란스러워 졌는지 모르지만 최소한 문제는 해결된다. 같은 문제가있는 사람이라면이 방법을 사용해보십시오!

관련 문제