每当用户从下拉列表中选择一个值时,我想从数据库中获取数据。出于这些目的,我编写了一个代码块,每当用户从下拉列表中选择一个值并通过ajax将该值传递给控制器时,就会调用JavaScript函数。下面是代码的快照。
CSHTML
@Html.DropDownList("Code", null, htmlAttributes: new { @class = "form-control", @onchange = "fetchData(this.value)" })
JS
<script>
function fetchData(Code) {
$.ajax({
url: '@(Url.Action("fetchCode", "ChargesSetup"))',
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: "{'Code':'" + Code + "'}",
contentType: false,
processData: false,
success: function (result) {
console.log(result);
},
error: function (result) {
console.log("E");
}
});
}
</script>
注意:我已尝试将格式传递给控制器,即值 JavaScript中的代码正确为'A'。但在控制器类中 显示为
@p__linq__0
。当我硬编码控制器的代码值 工作得很好。
控制器
[HttpPost]
public JsonResult fetchData(string Code)
{
IQueryable chargestable = from p in db.chargestable where (p.Code == Code) select p;
return Json(chargestable , JsonRequestBehavior.AllowGet);
}
在JavaScript中,下拉值与我们想要的完全相同:
但是在AJAX调用之后,在控制器中,下拉的值会改为某些内容,例如@p__linq__0
{SELECT
[Extent1].[area] AS [area]
FROM [dbo].[chargestable] AS [Extent1]
WHERE [Extent1].[Code] = @p__linq__0}
我的代码有什么问题?我如何解决这个问题,因为只要选择了下拉值,我就需要获得chargestable
的缓冲区。
通过更改return语句没有效果,因为未设置参数的值,它始终为null。
return Json(chargestable.ToList(), JsonRequestBehavior.AllowGet);