如何将 JsonResult 返回到 Razor 页面?

Huy*_* B. 5 javascript asp.net ajax razor asp.net-core

我是 ASP.net 和 Razor Pages 的新手。在下面的代码中,我尝试使用基于州下拉列表的值填充地区下拉列表。这是我到目前为止所得到的:

\n\n

看法:

\n\n
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>\n<script language="javascirpt" type="text/javascript">\n    function GetDist(_stateId) {\n        var procemessage = "<option value=\'0\'> Please wait...</option>";\n        $("#select-state").html(procemessage).show();\n        var url = "/Info/GetDistById/";\n\n        $.ajax({\n            url: url,\n            data: { stateid: _stateId },\n            cache: false,\n            type: "POST",\n            success: function (data) {\n                var markup = "<option value=\'0\'>Qu\xe1\xba\xadn/Huy\xe1\xbb\x87n</option>";\n                for (var x = 0; x < data.length; x++) {\n                    markup += "<option value=" + data[x].Value + ">" + data[x].Text + "</option>";\n                }\n                $("#select-state").html(markup).show();\n            },\n            error: function (reponse) {\n                alert("error : " + reponse);\n            }\n        });\n\n    }\n</script>\n\n<div class="col-md-offset-0 col-md-2">\n            <select class="form-control" id="select-state" onchange = "javascript:GetDist(this.value);">\n                @foreach (var state in Model.tbState)\n                {\n                    <option value=@state.StateId>@state.Statename</option>\n                }\n            </select>\n        </div>\n        <div class="col-md-1 ">Qu\xe1\xba\xadn/Huy\xe1\xbb\x87n: </div>\n        <div class="col-md-offset-0 col-md-2">\n            <select class="form-control" id="select-dist">\n                @foreach (var dist in Model.tbDistrict)\n                {\n                    <option value=@dist.DistrictId>@dist.Districtname</option>\n                }\n            </select>\n        </div>\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我的 cshtml.cs 文件中,我有这段代码。System.Web.Helpers我在代码的开头确实使用了:

\n\n
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>\n<script language="javascirpt" type="text/javascript">\n    function GetDist(_stateId) {\n        var procemessage = "<option value=\'0\'> Please wait...</option>";\n        $("#select-state").html(procemessage).show();\n        var url = "/Info/GetDistById/";\n\n        $.ajax({\n            url: url,\n            data: { stateid: _stateId },\n            cache: false,\n            type: "POST",\n            success: function (data) {\n                var markup = "<option value=\'0\'>Qu\xe1\xba\xadn/Huy\xe1\xbb\x87n</option>";\n                for (var x = 0; x < data.length; x++) {\n                    markup += "<option value=" + data[x].Value + ">" + data[x].Text + "</option>";\n                }\n                $("#select-state").html(markup).show();\n            },\n            error: function (reponse) {\n                alert("error : " + reponse);\n            }\n        });\n\n    }\n</script>\n\n<div class="col-md-offset-0 col-md-2">\n            <select class="form-control" id="select-state" onchange = "javascript:GetDist(this.value);">\n                @foreach (var state in Model.tbState)\n                {\n                    <option value=@state.StateId>@state.Statename</option>\n                }\n            </select>\n        </div>\n        <div class="col-md-1 ">Qu\xe1\xba\xadn/Huy\xe1\xbb\x87n: </div>\n        <div class="col-md-offset-0 col-md-2">\n            <select class="form-control" id="select-dist">\n                @foreach (var dist in Model.tbDistrict)\n                {\n                    <option value=@dist.DistrictId>@dist.Districtname</option>\n                }\n            </select>\n        </div>\n
Run Code Online (Sandbox Code Playgroud)\n\n

我发现 Json() 方法仅适用于ControllerMVC 中的类,而不适用于 RazorPageModel类,因此它给出错误 CS0103“名称 \'Json\' 在当前上下文中不存在”。有办法让它发挥作用吗?

\n

Pra*_* R. 2

ASP页面有常用OnGetOnPost方法。如果您需要通过 Ajax 对同一页面进行任何其他调用,则必须遵循OnGet*OnPost*约定。

在您给出的示例中,您需要将方法命名为 ,OnPostDistById并且在 Javascript 中您需要将 URL 命名为"/Info/DistById"。如果这是一个 HTTP Get 调用,方法名称将保持不变OnGetDistById,并且 URL 将保持不变。

请参阅此处了解更多信息。