修复 URL 以返回带有 JsonResult 的下拉列表项 - MVC- C#

Posted

技术标签:

【中文标题】修复 URL 以返回带有 JsonResult 的下拉列表项 - MVC- C#【英文标题】:Fix URL to return dropdownlist items with JsonResult - MVC- C# 【发布时间】:2021-11-01 18:56:45 【问题描述】:

我的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>")
              );
          );
      )
  );

返回列表的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 上,它应该返回 GetDepartment 列表,但它没有。如何修复网址?

当我在索引视图上时,它会返回正确的 URL,例如 Home/GetDepartment - 在使用另一个视图时如何解决这个问题?

另外提一下,我使用一个控制器,HomeController。

【问题讨论】:

使用完整的 url 而不是只使用方法名 【参考方案1】:

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

方式一:

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

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

方式二:

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

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

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

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

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

【讨论】:

谢谢,这工作 100%。我学到了一些新东西。 $.get('@Url.Action("GetDepartment","Home")' - 不知道这是要走的路。 @someone13 它建议使用方法而不是使用魔术字符串,并且在 iis 服务器上部署时可以避免预期的失败是子目录 嗨 Ehsan - 它可以在 localhost 上运行,但是当我将它发布到 IIS 服务器时不行?这是否保持不变:$.get('@Url.Action("GetDepartment","Home")', id: $("#ddDivision").val() , function (data) 是的,它也应该适用于已发布版本,请检查为已发布版本浏览器调试工具生成的 url 是什么 没关系,我使用了不正确的下拉 ID。有用。再次感谢!

以上是关于修复 URL 以返回带有 JsonResult 的下拉列表项 - MVC- C#的主要内容,如果未能解决你的问题,请参考以下文章

带有 JObject 元素的 C# JsonResult 返回空数组

从 MVC 控制器返回带有对象列表的 JsonResult

.net mvc $.ajax url一直错误,跳转不到相应的返回JsonResult的方法

简单的 JsonResult 在 Jquery ajax 方法上返回 parsererror

工作总结 页面 ActionResult / JsonResult 将对象以 Json() 返回

MVC的JsonResult用法