AJAX调用错误的url。有什么好处?
我在AJAX帖子上遇到了问题。我正在定义将AJAX调用发布到哪里,但它将发布到其他地方。请帮忙 我使用的是MVC Telerik网格。如果你对它不熟悉,这可能并不重要。我在下面的例子 根据该示例,此网格拼图的重要部分包括:AJAX调用错误的url。有什么好处?,ajax,asp.net-mvc-3,post,telerik,Ajax,Asp.net Mvc 3,Post,Telerik,我在AJAX帖子上遇到了问题。我正在定义将AJAX调用发布到哪里,但它将发布到其他地方。请帮忙 我使用的是MVC Telerik网格。如果你对它不熟悉,这可能并不重要。我在下面的例子 根据该示例,此网格拼图的重要部分包括: .Editable(editing => editing.Mode(GridEditMode.InCell)) 同样从该示例中,定义AJAX调用的url: .DataBinding(dataBinding => dataBinding.Ajax()
.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()
方法,第一个参数是动作,第二个参数是控制器。我有第三个可选参数,其中包含要在post中发回的其他数据
我的网格是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()
)
当我单击网格工具栏中的Save按钮时,我可以使用firebug查看Select()
方法进行正确的AJAX调用,但是Update()
方法没有:(参见)
在此图像中,第一个post url与传递到mySelect()
方法中的值相对应。第二个帖子url与我的Update()
方法不一致
这是怎么回事?提前谢谢所以我所做的没有错。MVC项目不知怎么搞砸了 我创建了一个一次性项目,试图重现这个问题,但我做不到——一次性项目正在发挥作用。因此,我删除了解决方案中的MVC项目,并将这些片段一个接一个地复制到新项目中,果然奏效了。我不知道一开始它是如何变得无人居住的,但至少这个问题得到了纠正。对于有同样问题的人,我建议你试试这个
[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
}
};
}