为什么我传入 JQuery Autocomplete 的第二个参数的值始终为零?
Why is the value of second parameter I'm passing in JQuery Autocomplete always zero?
我正在尝试将一个附加参数传递到我的控制器中。一切正常,只是我似乎无法获取第二个参数的值。
我的控制器需要以下两个参数:
public JsonResult GetProductList(string term, int manufacturerid)
我的自动完成编码如下:
$("#InternalProductNumber").catcomplete({
delay: 0,
min_length: 3,
source: '@Url.Action("GetProductList", "Proposal")',
data: {
term: $("#InternalProductNumber").val(),
manufacturerid: $("#ManufacturerId").val()
},
select: function (event, ui) {
$("#ProductId").val(ui.item.value);
$("#InternalProductNumber").val(ui.item.label);
$("#SellPrice").val(ui.item.sellprice);
return false;
}
});
Term 始终正确传递,但 manufacturerid(它是一个下拉列表)始终为零。如果我在 select 函数中放置一个警报,我会得到一个非零结果,告诉我我有一个值。
alert($("#ManufacturerId").val());
******* 编辑 *******
我按照建议添加了代码,现在看起来如下:
$("#InternalProductNumber").catcomplete({
delay: 0,
min_length: 3,
source: '@Url.Action("GetProductList", "Proposal")'+ `?manufacturerid=${$("#ManufacturerId").val()}`,
select: function (event, ui) {
alert('@Url.Action("GetProductList", "Proposal")' + `?manufacturerid=${$("#ManufacturerId").val()}`);
$("#ProductId").val(ui.item.value);
$("#InternalProductNumber").val(ui.item.label);
$("#SellPrice").val(ui.item.sellprice);
return false;
}
});
我得到的 manufacturerid 参数仍然为 0。这是开发人员选项中“网络”选项卡的结果。
我在 selection 之后添加了警报只是为了仔细检查,我在警报中得到了正确的结果。
不确定从这里去哪里。我做错了什么?
谢谢。
-- 瓦尔
您看到 term
是来自文本框 InternalProductNumber
的 jQuery 内置参数。 term
将始终出现在您的方法 public JsonResult GetProductList(string term, int manufacturerid)
.
中
我能够在 ASP.NET 核心项目中重现您的代码并得到相同的结果 manufacturerid = 0
。我的代码略有不同:
$("#InternalProductNumber").autocomplete({
minLength: 3,
source: '@Url.Action("GetProductList", "Home")',
data: {
term: $("#InternalProductNumber").val(),
manufacturerid: $("#ManufacturerId").val()
},
select: function (event, ui) {
console.log("In select function.");
return false;
}
});
我进行了调试,在 Watch window 中我可以看到 Request.QueryString = '?term=aaa'
而没有 manufacturerid
。
解决方案
$("#InternalProductNumber").catcomplete({
delay: 0,
min_length: 3,
source: '@Url.Action("GetProductList", "Proposal")'+ `?manufacturerid=${$("#ManufacturerId").val()}`,
select: function (event, ui) {
$("#ProductId").val(ui.item.value);
$("#InternalProductNumber").val(ui.item.label);
$("#SellPrice").val(ui.item.sellprice);
return false;
}
});
function ManufacturerId_OnChange() {
$("#InternalProductNumber").catcomplete('option', 'source', '@Url.Action("GetProductList", "Home")' + `?manufacturerid=${$("#ManufacturerId").val()}`);
}
在我添加 manufacturerid
作为 QueryString 参数后,函数 GetProductList
正确地得到 term
和 manufacturerid
.
更新
About.cshtml
@{
ViewData["Title"] = "About";
Layout = null;
}
<html>
<body>
<h2>@ViewData["Title"]</h2>
<h3>@ViewData["Message"]</h3>
<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<p>Use this area to provide additional information.</p>
<input type="text" id="InternalProductNumber" name="InternalProductNumber" />
<br />
<select id="ManufacturerId" name="ManufacturerId" onchange="ManufacturerId_OnChange();">
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
<option value="4">Four</option>
</select>
<script type="text/javascript">
console.log(`In 1 ${parseInt($('#ManufacturerId').val())}.`);
//catcomplete
$("#InternalProductNumber").autocomplete({
minLength: 3,
source: '@Url.Action("GetProductList", "Home")' + `?manufacturerid=${$("#ManufacturerId").val()}`,
select: function (event, ui) {
console.log("In select function.");
return false;
}
});
function ManufacturerId_OnChange() {
//catcomplete
$("#InternalProductNumber").autocomplete('option', 'source', '@Url.Action("GetProductList", "Home")' + `?manufacturerid=${$("#ManufacturerId").val()}`);
}
</script>
HomeController.cs
public class HomeController : Controller
{
[HttpGet]
public JsonResult GetProductList(string term, int manufacturerid)
{
var strTestJSON = "{ \"test\": 1, \"cat\": 2}";
return Json(JsonConvert.DeserializeObject(strTestJSON));
}
}
我正在尝试将一个附加参数传递到我的控制器中。一切正常,只是我似乎无法获取第二个参数的值。
我的控制器需要以下两个参数:
public JsonResult GetProductList(string term, int manufacturerid)
我的自动完成编码如下:
$("#InternalProductNumber").catcomplete({
delay: 0,
min_length: 3,
source: '@Url.Action("GetProductList", "Proposal")',
data: {
term: $("#InternalProductNumber").val(),
manufacturerid: $("#ManufacturerId").val()
},
select: function (event, ui) {
$("#ProductId").val(ui.item.value);
$("#InternalProductNumber").val(ui.item.label);
$("#SellPrice").val(ui.item.sellprice);
return false;
}
});
Term 始终正确传递,但 manufacturerid(它是一个下拉列表)始终为零。如果我在 select 函数中放置一个警报,我会得到一个非零结果,告诉我我有一个值。
alert($("#ManufacturerId").val());
******* 编辑 *******
我按照建议添加了代码,现在看起来如下:
$("#InternalProductNumber").catcomplete({
delay: 0,
min_length: 3,
source: '@Url.Action("GetProductList", "Proposal")'+ `?manufacturerid=${$("#ManufacturerId").val()}`,
select: function (event, ui) {
alert('@Url.Action("GetProductList", "Proposal")' + `?manufacturerid=${$("#ManufacturerId").val()}`);
$("#ProductId").val(ui.item.value);
$("#InternalProductNumber").val(ui.item.label);
$("#SellPrice").val(ui.item.sellprice);
return false;
}
});
我得到的 manufacturerid 参数仍然为 0。这是开发人员选项中“网络”选项卡的结果。
我在 selection 之后添加了警报只是为了仔细检查,我在警报中得到了正确的结果。
不确定从这里去哪里。我做错了什么?
谢谢。
-- 瓦尔
您看到 term
是来自文本框 InternalProductNumber
的 jQuery 内置参数。 term
将始终出现在您的方法 public JsonResult GetProductList(string term, int manufacturerid)
.
我能够在 ASP.NET 核心项目中重现您的代码并得到相同的结果 manufacturerid = 0
。我的代码略有不同:
$("#InternalProductNumber").autocomplete({
minLength: 3,
source: '@Url.Action("GetProductList", "Home")',
data: {
term: $("#InternalProductNumber").val(),
manufacturerid: $("#ManufacturerId").val()
},
select: function (event, ui) {
console.log("In select function.");
return false;
}
});
我进行了调试,在 Watch window 中我可以看到 Request.QueryString = '?term=aaa'
而没有 manufacturerid
。
解决方案
$("#InternalProductNumber").catcomplete({
delay: 0,
min_length: 3,
source: '@Url.Action("GetProductList", "Proposal")'+ `?manufacturerid=${$("#ManufacturerId").val()}`,
select: function (event, ui) {
$("#ProductId").val(ui.item.value);
$("#InternalProductNumber").val(ui.item.label);
$("#SellPrice").val(ui.item.sellprice);
return false;
}
});
function ManufacturerId_OnChange() {
$("#InternalProductNumber").catcomplete('option', 'source', '@Url.Action("GetProductList", "Home")' + `?manufacturerid=${$("#ManufacturerId").val()}`);
}
在我添加 manufacturerid
作为 QueryString 参数后,函数 GetProductList
正确地得到 term
和 manufacturerid
.
更新
About.cshtml
@{
ViewData["Title"] = "About";
Layout = null;
}
<html>
<body>
<h2>@ViewData["Title"]</h2>
<h3>@ViewData["Message"]</h3>
<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<p>Use this area to provide additional information.</p>
<input type="text" id="InternalProductNumber" name="InternalProductNumber" />
<br />
<select id="ManufacturerId" name="ManufacturerId" onchange="ManufacturerId_OnChange();">
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
<option value="4">Four</option>
</select>
<script type="text/javascript">
console.log(`In 1 ${parseInt($('#ManufacturerId').val())}.`);
//catcomplete
$("#InternalProductNumber").autocomplete({
minLength: 3,
source: '@Url.Action("GetProductList", "Home")' + `?manufacturerid=${$("#ManufacturerId").val()}`,
select: function (event, ui) {
console.log("In select function.");
return false;
}
});
function ManufacturerId_OnChange() {
//catcomplete
$("#InternalProductNumber").autocomplete('option', 'source', '@Url.Action("GetProductList", "Home")' + `?manufacturerid=${$("#ManufacturerId").val()}`);
}
</script>
HomeController.cs
public class HomeController : Controller
{
[HttpGet]
public JsonResult GetProductList(string term, int manufacturerid)
{
var strTestJSON = "{ \"test\": 1, \"cat\": 2}";
return Json(JsonConvert.DeserializeObject(strTestJSON));
}
}