【发布时间】:2012-04-02 11:03:37
【问题描述】:
我无法让 C# 和 JavaScript/jQuery 在这里发挥得很好。
我有一个淘汰视图模型,普通的旧 javascript 对象...它的属性/方法之一触发 .ajax() 调用,并且 url 参数是使用它的一些其他属性值(javascript 变量)构建的。
这在完全包含在 JavaScript 中时可以正常工作,但是当作为应用程序部署到 IIS 时,相对路径会被破坏。
在 MVC3 中,通常我会使用 @Url.Action 之类的东西并让服务器端构建地址...但同样,技巧是 C# 不知道更改的 javascript 值。
代码:
var viewModel = {
vendors: ko.observableArray([]),
count: ko.observable(10),
page: ko.observable(1),
filterText: ko.observable(""),
submit: function () {
$.ajax({
// works fine, until deploy when it is no longer a site relative URL
url: 'vendors/' + viewModel.count() + '/' + viewModel.filterText(),
// does not work, because C# is unaware of the javascript variables.
//url: @Url.Action("Vendors", "Home", new { count = viewModel.count(), filter = viewModel.filterText() })
dataType: 'json',
success: function (data) {
viewModel.vendors(data);
}
});
}
// next: // load sequence starting with (page+1 * count)
// previous: // load sequence starting with (page-1 * count)
};
ko.applyBindings(viewModel);
问题:
然后我的问题是,如何使用 javascript 变量值(例如 count、filterText)构建 ajax 调用的 url,并且仍然从应用程序的相对根目录映射?
【问题讨论】:
-
javascript viewModel 是在 .js 文件中定义的,还是在您的视图页面上定义的?您可以考虑映射 url @Url.Action("Vendors","Home") 然后在 javascript 中添加属性
标签: c# javascript asp.net-mvc knockout.js relative-path