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

时间:2015-08-04 14:27:12

标签: c# asp.net-mvc

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

例如,以下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”以外的其他数据属性名称,即使只有一个参数匹配,它也不会起作用。这是为什么?

2 个答案:

答案 0 :(得分:1)

与您无法将方法声明为:

完全相同
$table = "<table>";
$table .= "<tr><td>Row 1</td></tr>";

$i = 0;

if ($result->num_rows > 0) {
     // output data of each row
     while($row = $result->fetch_assoc()) {
              $table .= "<tr><td>Col 1</td></tr>";
     }

} 

$table .= "</table>";

echo $table;

..并希望这可行:

public void Test(string test = null)

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

这允许您拥有具有相同名称的操作,但是您需要接受不同的参数,这是一种好处而不是负担。

如果您给我们一个您希望以不同方式命名的方案,我们可以帮助进一步解释或建议替代方案。自定义模型绑定器,动作过滤器(或任何过于复杂的)或直接访问表单值(作为键控数组)等内容始终是一个选项,具体取决于您的实际要求。

答案 1 :(得分:1)

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