在Javascript文件中解析控制器路径

时间:2014-06-30 15:32:17

标签: c# javascript asp.net asp.net-mvc kendo-grid

我正在使用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 /”。

时,这仍然不起作用

谢谢!

0 个答案:

没有答案