请帮助...... 我已经看到了一些关于此的帖子,但它们似乎没有帮助......
我有一个定义的路线,直接调用时效果很好;
http:// localhost : 53505/GetLocationData/Canada/Ontario/Toronto
而且我得到了我所期望的 - 来自我的AddressController的结果。
...
现在,在我的应用程序中,我的ClientController启动了一个视图〜/ Views / Client / Index.cshtml
通过调用客户/索引
该View有一个.ajax javascript,它尝试在从良好的GEO-IP服务获得结果后异步调用上面提到的相同AddressController函数:
$(document).ready(function() {
var urlGeoIeoip = "http:// smart-ip . net/geoip-json?callback=?";
$.ajax({
url: urlGeoIeoip,
type: "GET",
dataType: "json",
timeout: 2000,
success: function (geoipdata) {
$("#AddressCity").data("kendoComboBox").value(geoipdata.city);
$("#AddressState").data("kendoComboBox").value(geoipdata.region);
$("#AddressCountry").data("kendoComboBox").value(geoipdata.countryName);
var $form = $(this);
$.ajax({
url: "getlocationdata",
type: "GET",
data: { 'country': geoipdata.countryName, 'region': geoipdata.region, 'city': geoipdata.city },
timeout: 500,
success: function(data) {
var $target = $($form.attr("data-htci-target"));
var $newHtml = $(data);
$target.replaceWith($newHtml);
}
});
}
}).fail(function(xhr, status) {
if (status === "timeout") {
// log timeout here
}
});
});
var urlGeoIeoip = "http:// smart-ip . net/geoip-json?callback=?";
$.ajax({
url: urlGeoIeoip,
type: "GET",
dataType: "json",
timeout: 2000,
success: function (geoipdata) {
$("#AddressCity").data("kendoComboBox").value(geoipdata.city);
$("#AddressState").data("kendoComboBox").value(geoipdata.region);
$("#AddressCountry").data("kendoComboBox").value(geoipdata.countryName);
var $form = $(this);
$.ajax({
url: "getlocationdata",
type: "GET",
data: { 'country': geoipdata.countryName, 'region': geoipdata.region, 'city': geoipdata.city },
timeout: 500,
success: function(data) {
var $target = $($form.attr("data-htci-target"));
var $newHtml = $(data);
$target.replaceWith($newHtml);
}
});
}
}).fail(function(xhr, status) {
if (status === "timeout") {
// log timeout here
}
});
});
它工作正常,但请求得到我的ClientController而不是地址控制器的回答!!
我看到它进入/ Client / Index,Request.Url是:
为什么不到达我的AddressController?
这是我的RouteConfig:
http:// localhost : 53505/Client/Index/GetLocationData?country=Canada®ion=Ontario&city=Toronto
答案 0 :(得分:1)
如果您将$ .ajax中的网址更改为“/ getlocationdata”(而不仅仅是“getlocationdata”),该怎么办?
答案 1 :(得分:0)
看起来您正在尝试通过查询字符串发送数据(通过数据选项传递参数):
$.ajax({
url: "getlocationdata",
type: "GET",
data: { 'country': geoipdata.countryName, 'region': geoipdata.region, 'city': geoipdata.city },
timeout: 500,
success: function(data) {
var $target = $($form.attr("data-htci-target"));
var $newHtml = $(data);
$target.replaceWith($newHtml);
}
});
选项1 因此,您应该像这样定义您的路线:
routes.MapRoute(
name: "GetLocationData",
url: "getlocationdata",
defaults: new { controller = "Address", action = "GetLocationData"}
);
这会侦听路线:http://localhost:53505/GetLocationData?country=Canada®ion=Ontario&city=Toronto
然后您可以使用UrlHelper在视图中获取网址(假设下面是cshtml):
$.ajax({
url: "@Url.RouteUrl("GetLocationData")", //Notice this is the Name of the Route
type: "GET",
data: { 'country': geoipdata.countryName, 'region': geoipdata.region, 'city': geoipdata.city },
timeout: 500,
success: function(data) {
var $target = $($form.attr("data-htci-target"));
var $newHtml = $(data);
$target.replaceWith($newHtml);
}
});
这将允许您自由更改路线配置中的路线,而无需修改您的视图。
选项2 如果你想保持这样的路线(使用inurl数据),你必须像这样定义你的ajax调用:
$.ajax({
url: "/getlocationdata/" + geoipdata.countryName + "/" + geoipdata.region + "/" + geoipdata.city, //This will manually build the route as you defined it
type: "GET",
timeout: 500,
success: function(data) {
var $target = $($form.attr("data-htci-target"));
var $newHtml = $(data);
$target.replaceWith($newHtml);
}
});
你仍然可以将UrlHelper用于这种类型的路由,但是你不能在javascritpt中轻松使用它:
$.ajax({
url: "@Url.RouteUrl("GetLocationData", new{country = "SomeCountry",region="SomeRegion",city="SomeCity"})", //unfortunately, you need these while you are in C# code
type: "GET",
timeout: 500,
success: function(data) {
var $target = $($form.attr("data-htci-target"));
var $newHtml = $(data);
$target.replaceWith($newHtml);
}
});