将数据作为参数传递给.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",它不会工作,即使只有一个参数匹配。为什么呢?
就像你不能这样声明一个方法:
public void Test(string test = null)
. .并期望它能工作:
obj.Test(notTest: null)
如果你没有用正确的名称传递你的数据,它将不会绑定。只需以同样的方式考虑它,您正在调用一个方法,尽管是由ASP抽象的。. NET/IIS通过路由HTTP请求。
这允许您使用具有相同名称的操作,但如果您需要接受它们,则可以使用不同的参数,这是一种好处而不是负担。
如果你给我们一个场景,你想要不同的命名,我们可能能够帮助进一步解释或建议替代方案。诸如自定义模型绑定器、动作过滤器(或任何过于复杂的东西)或直接访问表单值(作为一个键数组)总是一个选项,取决于您的实际需求。
MVC ModelBinder需要匹配这些名称,以便它知道如何将传入的请求数据与正确的参数关联起来。
- ASP的6个技巧. MVC模型绑定