使用 JsonResult - MVC- C# 修复 URL 到 return 下拉列表项

Fix URL to return dropdownlist items with JsonResult - MVC- C#

我的js下拉代码:

       $(document).ready(function () {
    $("#ddDivision").change(function () {
        $.get("GetDepartment", { id: $("#ddDivision").val() }, function (data) {
              $("#ddDept").empty();
              $("#ddDept").append("<option value='Please Select'>Please Select</option>")
              $.each(data, function (index, row) {
                  console.log(row);
                  $("#ddDept").append("<option value='" + row.Value + "'>" + row.Text + "</option>")
              });
          });
      })
  });

return列表的JsonResult:

      public JsonResult GetDepartment(int id)
    {
        List<SelectListItem> items = new List<SelectListItem>();
        //query to return items
        return Json(items, JsonRequestBehavior.AllowGet);
    }  

我得到的错误(下拉列表未填充)但我在 F12 开发工具中得到这个:

http:///localhost/Home/EditView/GetDepartment?id=2

所以 URL 是错误的,因为它在 EditView 上,它应该 return GetDepartment 列表,但它没有。如何修复 URL ?

当我在索引视图中时,它 return 是正确的 URL,就像 Home/GetDepartment - 使用其他视图时如何解决这个问题?

还要提一下,我使用一个控制器,HomeController。

有两种方法可以解决 url 的这个问题。

方式一:

通常推荐的方法是使用 Url.Action 辅助方法,它确保为指定的控制器和操作生成正确的 url,例如:

$.get('@Url.Action("GetDepartment","Home")', { id: $("#ddDivision").val() }, function (data)

方式二:

如果 js 代码在单独的 js 文件中,那么我们所做的就是使用 html 元素的数据属性,例如:

<select id="ddlDivision" data-url='@Url.Action("GetDepartment","Home")'>

然后在 js 中,我们可以做的是使用来自数据属性的 url,如下所示:

 $("#ddDivision").change(function () {
    var url = $(this).data("url");
    $.get(url , { id: $("#ddDivision").val() }, function (data) {

希望它能让您对任何一种方式有所了解。