gpt4 book ai didi

C# Mvc ajax baseUrl

转载 作者:行者123 更新时间:2023-11-30 21:28:25 30 4
gpt4 key购买 nike

所以,

我有一个使用 MVC 区域的应用程序。 Controller 的路由看起来像

[Route("Settings/{something}")]

然后我有一个 Action

  [Route("suggest/{term}")]
public ActionResult Suggest(string something, string term).

我尝试从 javascript 调用 Suggest 操作

var suggestUri = "suggest/";
$searchInput.autocomplete({
source: function (request, response) {
$.ajax({
type: "GET",
url: suggestUri + request.term,
dataType: "json",
success: function (data) {
response(data);
},
error: function (err) {
console.log(err);
}
});
},
minLength: 3
});

从我的角度来看,这个 ajax 调用 url 应该是

 http://localhost:7311/Settings/firstValue/suggest/term

但实际结果是

 http://localhost:7311/Settings/suggest/term

缺少{something}

我肯定做错了什么,但我不知道是什么。

LE:我做了一些测试。

如果我向我的 Controller 申请一条不同的路线,例如

[路线("设置/{something}/a")]

结果是

 http://localhost:7311/Settings/firstValue/suggest/term

应该是什么时候

http://localhost:7311/Settings/firstValue/a/suggest/term

然后我试着做

[Route("Settings/{something}/a/b")]

结果是

 http://localhost:7311/Settings/firstValue/a/suggest/term

应该是什么时候

http://localhost:7311/Settings/firstValue/a/b/suggest/term

感觉 mvc 总是遗漏我的 Controller 的最后一个参数。有什么原因吗?

LE2:

在 Startup.cs 中,MapRoute 看起来像这样

  app.UseMvc(routes =>
{
routes.MapRoute(
name: "somethingBased",
template: "{area:exists}/{somethingBased?}/{controller=Home}/{action=Index}");

routes.MapRoute(
name: "home",
template: "{controller=Home}/{action=Index}/{application?}");

});

最佳答案

假设您在 Razor View 中呈现您的 javascript,您始终可以使用 @Url.Action 来计算 URL,而不是尝试从 javascript 计算它。

$searchInput.autocomplete({
source: function (request, response) {
$.ajax({
type: "GET",
url: @Json.Serialize(Url.Action("Suggest", new { term = '$TERM$' })).replace('$TERM$', request.term),
dataType: "json",
success: function (data) {
response(data);
},
error: function (err) {
console.log(err);
}
});
},
minLength: 3
});

这是使用 Url.Action("Suggest", new { term = '$TERM$' }) 来计算 MVC 路由服务器端的模板,它返回 Settings/firstValue/suggest/$TERM$.然后 @Json.Serialize 将其转换为 javascript 文字 "Settings/firstValue/suggest/$TERM$"

在 javascript 中,您将 $TERM$ 字符串替换为您的动态值。 razor 呈现的 javascript 将如下所示:

url: "Settings/firstValue/suggest/$TERM$".replace("$TERM$", request.term)

这种方法的优点是,如果您稍后在 MVC 中更改路由,客户端代码仍然有效。

如果您需要指定可能无法从当前上下文中推断出的 Controller 、区域或其他路由值,Url.Action 有大量重载来处理。

关于C# Mvc ajax baseUrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56529117/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com