我有一个部分视图,当用户单击按钮时,会将一些数据传递给数据库并返回结果。结果必须显示在另一个局部视图中。使用以下Controller方法和Ajax脚本获得结果:
public ActionResult GetResultData(Models.SelectedFilterValues selectedFilters)
{
resultData = resultRepository.GetResultData(
selectedFilters.Projects,
selectedFilters.ExperimentTypes,
selectedFilters.StudySet,
selectedFilters.Species,
selectedFilters.Strain,
selectedFilters.Department,
selectedFilters.Location);
return PartialView("Results", resultData);
}
function GetResultData(selectedProjects, selectedExperiments, selectedStudySets, selectedDepartments, selectedLocations, selectedSpecies, selectedStrain) {
$.ajax({
type: "GET",
url: "/Search/GetResultData",
data: { projects: selectedProjects, experimentTypes: selectedExperiments, studySet: selectedStudySets,
department: selectedDepartments, location: selectedLocations, species: selectedSpecies, strain: selectedStrain
},
error: function (data) {
},
success: function (data) {
}
});
}
当数据返回到Ajax方法时,我一直收到错误,这是因为它返回了部分视图吗?我想要的是Ajax方法接受数据,然后让我将数据传递到新的局部视图。这可能吗?
感谢。
答案 0 :(得分:2)
我认为你正在混淆客户端和服务器端逻辑。
部分视图可以包含在服务器上执行的逻辑。通常,您将在Controller中执行业务逻辑,并在PartialView中执行UI逻辑。例如,任何使用Razor的标记实际上都是在服务器上执行的。结果就是HTML,它被发送到浏览器。
此HTML可能包含客户端(JavaScript)代码。所以通常你会创建一个PartialView,它包含调用jQuery方法的JavaScript代码,例如$ .ajax()。当它发生时,JavaScript到达浏览器的方式并不重要 - 作为PartialView的一部分,无关紧要。 JS代码在客户端执行,它在服务器端调用逻辑。
当Ajax调用将数据返回给客户端时,那里的JS代码可以将数据呈现到网格中,或者应用jQuery模板,或者根据需要做任何事情。它不能做的是执行服务器端的PartialView代码,因为任何PartialView早就执行了。