ASP.Net Razor Pages - 如何将json从剃刀页面返回到javascript $ .getJson?

时间:2018-05-01 19:46:45

标签: javascript c# asp.net json razor

我是网络开发的新手,我一直在寻找一段时间,我似乎无法找到解决方案。我在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>

2 个答案:

答案 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> }