更改下拉列表时如何将视图页面中的 javaScript 值传递给 Controller Action 参数

How to pass javaScript value in view page to Controller Action parameter, when change drop down list

我想在我的控制器操作中传递学生 ID,我使用了 JsonResult 操作,我捕获了学生 ID 但无法在操作中传递,

这是我的 JavaScript 代码,

<script type="text/javascript">
    $(document).ready(function () {
        $("#sId").change(function(){
            var studentId = $(this).val();
            debugger
            $.ajax({
            type:"post", 
            url:"/Department/GetDeptName/" + studentId,
            contentType:"html",
            success:function(response){
            debugger
            $("#dId").empty();
            $("#did").append(response);
            }
            })
        })
    });
</script>

我有一个下拉列表,我使用 ViewBag 从数据库中传递我的列表。当我 select 一个学生名字然后需要传递 his/her 部门名称。这是查看代码

<div class="row">
            <div class="col-md-6 mb-4">
                <label asp-for="Name" class="control-label">Student Name</label>
                <select asp-for="Id" class="form-control" id="sId"
                        asp-items="@(new SelectList(@ViewBag.messageStudent,"Id", "Name"))">
                </select>
            </div>
            <div class="col-md-6 mb-4">
                <label asp-for="DeptName" class="control-label">Department Name</label>
                <input asp-for="DeptName" id="dId" class="form-control mb-3"  type="text" placeholder="Dept Name" disabled>
            </div>

            <input type="hidden" asp-for="Id" name="Id" id="DeptName" />

        </div>

这是我的控制器代码,将列表从数据库传递到视图

    public async Task<IActionResult> DropDown()
    {
        var model = _scope.Resolve<FormModel>();

        await model.LoadStudenDataAsync();
        var studentList = model.StudentList.ToList();

        studentList.Insert(0, new Student { Id = 0, Name = "Select Group" });

        ViewBag.messageStudent = studentList;
        return View(model);
    }

现在我需要从视图页面传递学生ID,如果我传递学生ID那么我的问题就解决了, 这是我的 JsonResult 操作

    public async Task<JsonResult> GetDeptName(int studentId)
    {
        var model = _scope.Resolve<FormModel>();

        if (ModelState.IsValid)
        {
            await model.DeptList(studentId);
        }

        return Json(model);
    }

请大家帮帮我如何通过学生证,提前致谢

您必须使用 get ajax,因为您没有在请求正文中发布任何数据。并将数据类型更改为 json 因为您要返回 json

$.ajax({
            type:"GET", 
            url:"/Department/GetDeptName/" + studentId,
            dataType: 'json',
            ....

和行动

[Route("~/Department/GetDeptName/{studentId}")]
public async Task<JsonResult> GetDeptName(int studentId)

并修复路由配置

public static void RegisterRoutes(RouteCollection routes)
         {
          routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
          routes.MapMvcAttributeRoutes();
          routes.MapRoute(
          name: "Default",
          url: "{controller}/{action}/{id}",
          defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
       );

但如果您使用不支持属性路由的旧网络,则只需更改 ajax 并保持现在的操作不变

$.ajax({
            type:"GET", 
            url:"/Department/GetDeptName?studentId=" + studentId,
            dataType: 'json',
            ....