我只是想知道何时将数据作为参数传递给控制器方法,为什么我们需要使用完全相同的名称,任何潜在的原因?
例如,以下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”以外的其他数据属性名称,即使只有一个参数匹配,它也不会起作用。这是为什么?
答案 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需要匹配名称,以便知道如何将传入的请求数据与正确的参数相关联。