我是网络开发的新手,我一直在寻找一段时间,我似乎无法找到解决方案。我在asp.net core 2.0中使用剃刀页面,我想根据另一个下拉框选择填充下拉框。当第一个下拉框的值发生变化时,我设置了以下javascript以在我的剃刀页面中点击一个过程。当我运行代码时,我无法让它工作。我认为这是由于我的返回值,但我似乎无法将其作为json值,因为它在我尝试时不断向我抛出错误。错误是“JSON在此上下文中无效”。任何人都可以向我建议如何将jSON从剃刀页面返回到javascript调用?
任何帮助将不胜感激!
SELECT --how do I perform that here?
FROM (
SELECT ages FROM peoeple
ORDER BY ages DESC
)foo
}
这是我的C#代码(我尝试使用过JsonResult,但这也没用):
@section Scripts {
<script type="text/javascript">
$('#Department').change(function () {
var selectedDepartment = $("#Department").val();
var cardSelect = $('#Card');
cardSelect.empty();
if (selectedDepartment != null && selectedDepartment != '') {
$.getJSON('@Url.Action("GetCardsByDivisionAndStatus")', { divisionID: selectedDepartment }, function (cards) {
if (cards != null && !jQuery.isEmptyObject(cards)) {
cardSelect.append($('<option/>', {
Card_ID: null,
Card_Number: ""
}))
$.each(cards, function (index, card) {
cardSelect.append($('<option/>', {
Card_ID: card.Card_ID,
Card_Number: card.Card_Number
}));
});
};
});
}
});
</script>
修改------------------------------------------- ---------------------------
所以我改变了下面的代码,现在我得到一个解析错误“JSON.parse:JSON数据的第1行第1列的意外字符”我无法弄清楚我能做什么看看它无法解析的数据回来了。我的代码下面没有转换为JSON,如果没有,我错过了什么?
// If the user selects a division then make sure to get the cards for that division only
[HttpGet]
public ActionResult GetCardsByDivisionAndStatus(string divisionID)
{
int checkinStatus;
int intdivisionID;
if (divisionID != "0" && divisionID != null)
{
// Retrieve a status of checked in so that only cards with a checked in status can
// be checked out.
checkinStatus = linqQuery.GetCardStatusByStatusDesc("Checked In", _Context);
intdivisionID = Convert.ToInt32(divisionID);
// Retrieve list of cards that have the checkin status ID
CardList = linqQuery.GetCardListByStatusIDandDeptID(checkinStatus, intdivisionID, _Context);
// Create the drop down list to be used on the screen.
carddropdown = new List<CardDropDown>();
carddropdown = loaddropdowns.ReturnDropDownList(CardList);
return new JsonResult(CardList);
}
return null;
}
这是我更新过程的C#代码:
@section Scripts {
<script type="text/javascript">
$('#Department').change(function () {
var selectedDepartment = $("#Department").val();
var cardSelect = $('#Card');
cardSelect.empty();
if (selectedDepartment != null && selectedDepartment != '') {
$.getJSON('@Url.Action("/CheckOutCard?handler=CardsByDivisionAndStatus")', { divisionID: selectedDepartment }, function (cards) {
if (cards != null && !jQuery.isEmptyObject(cards)) {
cardSelect.append($('<option/>', {
Card_ID: null,
Card_Number: ""
}))
$.each(cards, function (index, card) {
cardSelect.append($('<option/>', {
Card_ID: card.Card_ID,
Card_Number: card.Card_Number
}));
});
};
});
}
});
</script>
答案 0 :(得分:0)
将您的方法重命名为 OnGet CardsByDivisionAndStatus(注意&#34; OnGet&#34;前缀),并在jquery代码中将网址更改为
$.getJSON('/{PageRoute}?handler=CardsByDivisionAndStatus'
e.g.
$.getJSON('/About?handler=CardsByDivisionAndStatus'
请注意,处理程序查询字符串参数名称将是没有 OnGet 前缀的方法名称。
答案 1 :(得分:0)
所以我弄清楚问题是什么。显然我不需要在我的代码中使用@ URL.Action。这导致我没有点击我的C#代码,这反过来导致我的调用返回null响应。我修改了我的javascript代码,如下所示,以显示我在说什么。感谢Mohsin试图帮助我。
@section Scripts {
<script type="text/javascript">
$('#Department').change(function ()
{
var selectedDepartment = $("#Department").val();
var cardSelect = $('#Card');
cardSelect.empty();
if (selectedDepartment != null && selectedDepartment != '')
{
$.getJSON("/CheckOutCard?handler=CardsByDivisionAndStatus", { divisionID: selectedDepartment }, function (cards)
{
$.each(cards, function (index, card)
{
cardSelect.append($('<option/>',
{
value: card.card_ID,
text: card.card_Number
}));
});
});
}
});
</script> }