我正在使用Kendo网格来显示来自Web服务的结果。在控制器中访问web服务,然后我们将Kendo网格dataSource指向控制器,如下所示:
的JavaScript
var servicePath = "/Home/Search";
var postData = { "searchTerm" : searchTerm, "targetDB" : targetDB }
var grid = $("#grid1").kendoGrid({
pageable: {
pageSize: 10
},
dataSource: {
error: function (e) {
if (e.errors !== false) {
$("#errorContainer").html(e.errors);
}
},
transport: {
read: {
url: servicePath,
dataType: "json",
data: postData,
type: "POST"
}
},
},
dataBound: function (e) {
//Do Stuff
}
});
控制器
[HttpPost]
public ActionResult Search(string searchTerm, string targetDB)
{
//Do Search and Return JSON
}
问题
当我的网址为http://localhost/Home/Index
时,这非常有用,但只要是其他内容就会失败,例如http://localhost/
(项目从根运行时默认)。我使用jQuery .ajax调用作为kendo网格服务调用遇到了同样的问题。
问题
所以我的问题是,如何为Kendo Grid提供正确的服务URL(或者通常在指向控制器时),并知道它可以在所有路径变化中使用?
我尝试使用location.host
的变体来获取完整的URL,然后添加控制器和方法,但是Kendo服务调用失败并且没有错误。
我想我应该能够解析网址并使用我需要的东西,但我发现当我在网页的根目录时,我无法弄清楚要做什么来进行ajax调用工作。我试过使用控制器/方法和整个网址?我也尝试了下面描述的各种技术。
我错过了什么?是否有我可以使用的惯例或技术?
修改
我还尝试在页面上放置一个隐藏字段,其值为控制器URL:
<input type="hidden" value="@Url.Action("Search", "Home"); " id="serviceURL" />
然后在JS中使用该值:
var servicePath = $("#serviceURL").val();
但我发现,@Url.Action()
(值:Home/Search
)的值无论您的网址是http://localhost/
还是http:localhost/Home/Index
都是一样的,所以没有运气。当你在根页面上看起来像“localhost /”。
谢谢!