我怎样才能在我的ASP.NET Core 2 Razor应用程序中发出一个带有参数的 AJAX GET请求,我想把这个参数传递给接收函数。
例如,我的HTML中有一个Select
字段。根据选择的值,我希望接收一个值列表。为此,我用这种方式编写了一个AJAX GET请求。
$.ajax({
type: 'GET',
url: '/Index?handler=Test2',
contentType: 'json',
success: function (result) {
console.log('Data received: ');
console.log(result);
}
});
因此,这个调用几乎可以完美地工作。它调用代码隐藏页面(Index.cshtml.cs)中的OnGetTest2()
。我的OnGetTest2()
看起来像:
[HttpGet]
public IActionResult OnGetTest2(string id)
{
// Some code logic to get the needed values i want to post back
Console.WriteLine("Received id: " + id);
return new JsonResult(9999); // e.g. 9999 as return value
}
但是我在如何通过上面的AJAX调用将Select
元素的选定选项的值传递给OnGetTest2()
函数上遇到了麻烦。我如何才能让它工作呢?实际上我会收到“9999”,所以AJAX调用是工作的,但是我需要将选定的值传递给OnGetTest2()
函数。
4条答案
按热度按时间nfzehxib1#
有两种基本的方法可以做到这一点。
选项1:使用查询字符串。你 AJAX 基本上就是你所拥有的,你设置一个url变量
handler
等于“Test 2”。在控制器中使用Request.Query["handler"]
来获取值。选项2:路由属性。路由属性太棒了!把 AJAX 中的url改为
url = '/Index/Test2'
,然后在控制器中使用:如果你想要的不是字符串,比如int,可以这样写。
pinkon5k2#
首先获取Select-Field的值
然后通过 AJAX 调用将其发送到Action,如:
tzdcorbm3#
您需要声明一个设置为等于选定项的变量,而不是将字符串“Test2”作为参数发送。
或JQuery
然后您可以通过 AJAX 发送
camsedfj4#
按照问题中的方式维护方法结构,您可以轻松地构建 AJAX GET请求,如下所示:
注意URL会将id添加到查询中。查询是从'/Index?...'开始的,所以您只需在这里向查询添加一个参数。第一个查询是Razor用来查找方法的处理程序,然后您添加的任何其他查询,编译器都会将其Map到该方法的参数,就像您在编写一个带有查询的普通URL一样。
您不再需要routes属性或手动从控制器中的请求获取Id。您所拥有的就足够了。