将数据作为参数传递给.net MVC控制器方法

本文关键字:net MVC 控制器 方法 参数传递 数据 | 更新日期: 2023-09-27 18:06:13

我只是想知道当我们将数据传递给控制器方法作为参数时,为什么我们需要使用完全相同的名称,任何潜在的原因?

例如,下面的ajax调用:

$.ajax({
            // Get Faculty PartialView
            url: "/Home/FacultiesToPVDemo",
            type: 'Get',
            data: { courseName: selectedCourseName },
            success: function (data) {
                $("#facultyDetailTable").empty().append(data);
            },
            error: function () {
                alert("something seems wrong");
            }
        });

将在控制器中调用以下方法:

 public ActionResult FacultiesToPVDemo(string courseName)
    {
        IEnumerable<Course> allCourses = _repository.GetCourses();
        var selectedCourseId = (from c in allCourses where c.CourseName == courseName select c.CourseId).FirstOrDefault();
        IEnumerable<Faculty> allFaculties = _repository.GetFaculties();
        var facultiesForCourse = allFaculties.Where(f => f.AllotedCourses.Any(c => c.CourseId == selectedCourseId)).ToList();
        return PartialView("FacultyPV", facultiesForCourse);
    }

在ajax中,如果我使用不同的数据属性名称,而不是"courseName",它不会工作,即使只有一个参数匹配。为什么呢?

将数据作为参数传递给.net MVC控制器方法

就像你不能这样声明一个方法:

public void Test(string test = null)

. .并期望它能工作:

obj.Test(notTest: null)

如果你没有用正确的名称传递你的数据,它将不会绑定。只需以同样的方式考虑它,您正在调用一个方法,尽管是由ASP抽象的。. NET/IIS通过路由HTTP请求。

这允许您使用具有相同名称的操作,但如果您需要接受它们,则可以使用不同的参数,这是一种好处而不是负担。

如果你给我们一个场景,你想要不同的命名,我们可能能够帮助进一步解释或建议替代方案。诸如自定义模型绑定器、动作过滤器(或任何过于复杂的东西)或直接访问表单值(作为一个键数组)总是一个选项,取决于您的实际需求。

MVC ModelBinder需要匹配这些名称,以便它知道如何将传入的请求数据与正确的参数关联起来。

  • ASP的6个技巧. MVC模型绑定