剃须刀页面中的URL不会将数据发送到另一页面

时间:2018-10-18 16:57:17

标签: jquery asp.net-core-mvc razor-pages jquery-ajaxq

我正在使用Razor页面,我有两个页面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无效。问题出在哪里?

2 个答案:

答案 0 :(得分:2)

要从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>

答案 1 :(得分:0)

您应该做的第一件事是检查是否正在发出AJAX请求。当您更改ID为Course_GroupId的元素(选择列表?)中的值时,可以在Chrome和IE / Edge中通过单击F12调出开发人员工具并查看“网络”选项卡来实现此目的。如果没有请求,则可能使change事件处理程序连接到错误的元素或不存在的元素。如果提出请求,请检查其URL和响应。