URL 在 razor 页面中不会将数据发送到另一个页面

URL in razor pages dosen't send data to another page

我正在使用 Razor Pages,我有两个页面 CreateModelEditModel,在 CreateModel 中有 OnGetSubGroups 处理程序:

public class CreateModel : PageModel    
 {
  //Dependency Injection is here

  public IActionResult OnGetSubGroups(int subId)
  {
   SubOptions = courseService.CourseSubGroups(subId);
   return new JsonResult(SubOptions);
   }
 }

现在的问题是,当我想在 Edit.cshtml 中使用 JQuery Ajax 将数据传递到 OnGetSubGroups URL 时不起作用:

$('#Course_GroupId').on('change', function (e) {
 var optionSelected = $("option:selected", this);
 var valueSelected = this.value;
 $.ajax({
   type: "Get",                
    data: {
    subId: valueSelected,                                           
    },          
    url: "/Create?handler=SubGroups",
    contentType: "application/json; charset=utf-8",
    dataType: "json"
});

我使用了断点,但 url 不起作用。问题出在哪里?

您应该做的第一件事是检查 AJAX 请求是否正在发出。您可以在 Chrome 和 IE/Edge 中执行此操作,方法是按 F12 调出开发人员工具并在更改元素(Select 列表?)中的值时查看网络选项卡Course_GroupId 的 ID。如果没有发出请求,那么您可能将 change 事件处理程序连接到错误的元素或不存在的元素。如果发出请求,请检查其 URL 和响应。

对于从 EditCreate 的路由,您不能使用 URL "/Create?handler=SubGroups" 它将像 https://localhost:44389/Create?handler=SubGroups&subId=5 一样生成 URL 和忽略 PageFolder。我假设 CreateModel 不在根文件夹 Pages 中。如果是这样,您不应将 URL 与 "/Create?handler=SubGroups" 结合使用。

我建议您尝试以下代码:

<script type="text/javascript">
    $(document).ready(function () {
        $.ajax({
            type: "Get",
            data: {
                subId: 5,
            },
            url:"@Url.Page("Create", "SubGroups")",
            contentType: "application/json; charset=utf-8",
            dataType: "json"
        });
    });
</script>