jquery ASP.Net Core 2 Razor AJAX 是否使用参数获取?

3xiyfsfu  于 2022-11-29  发布在  jQuery
关注(0)|答案(4)|浏览(174)

我怎样才能在我的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()函数。

nfzehxib

nfzehxib1#

有两种基本的方法可以做到这一点。
选项1:使用查询字符串。你 AJAX 基本上就是你所拥有的,你设置一个url变量handler等于“Test 2”。在控制器中使用Request.Query["handler"]来获取值。

[HttpGet]
public IActionResult OnGetTest2()
{
    var id = Request.Query["handler"];
    // ... more stuff

}

选项2:路由属性。路由属性太棒了!把 AJAX 中的url改为url = '/Index/Test2',然后在控制器中使用:

[HttpGet, Route("index/{id}")]
public IActionResult OnGetTest2(string id)
{
    // id already has the value in it
    // ... do stuff

}

如果你想要的不是字符串,比如int,可以这样写。

[HttpGet, Route("index/{id:int}")]
public IActionResult OnGetTest2(int id)
{

    // ... do stuff

}
pinkon5k

pinkon5k2#

首先获取Select-Field的值

var SelectFieldValue =  $("#Select-Field-ID").val();

然后通过 AJAX 调用将其发送到Action,如:

$.ajax({
    type: 'GET',
    url: '/Index?id=' + SelectFieldValue,
    contentType: 'json',
    success: function (result) {
        console.log('Data received: ');
        console.log(result);
    }
});
tzdcorbm

tzdcorbm3#

您需要声明一个设置为等于选定项的变量,而不是将字符串“Test2”作为参数发送。

var e = document.getElementById("ddl");
var item= e.options[e.selectedIndex].value;

或JQuery

var item = $('#ddl').val();

然后您可以通过 AJAX 发送

$.ajax({
   type: 'GET',
   url: '/Index?id=' + item,
   contentType: 'json',
   success: function (result) {
    console.log('Data received: ');
    console.log(result);
   }
});
camsedfj

camsedfj4#

按照问题中的方式维护方法结构,您可以轻松地构建 AJAX GET请求,如下所示:

$.ajax({
    type: 'GET',
    url: '/Index?handler=Test2&id=' + id,
    contentType: 'json',
    success: function (result) {
        console.log('Data received: ');
        console.log(result);
    }
});

注意URL会将id添加到查询中。查询是从'/Index?...'开始的,所以您只需在这里向查询添加一个参数。第一个查询是Razor用来查找方法的处理程序,然后您添加的任何其他查询,编译器都会将其Map到该方法的参数,就像您在编写一个带有查询的普通URL一样。
您不再需要routes属性或手动从控制器中的请求获取Id。您所拥有的就足够了。

相关问题