我是MVC的新手,我有一个问题似乎无法解决。
我有一个页面,我们称之为索引,其中包含一个部分页面:
// Some html + razor
<input type="button" value="Filter:"
onclick="FilterByUserRequestedValues()" />
<div id="filteredResultsDiv">
@Html.Partial("_filteredResultsPartial", Model)
</div>
部分页面显示我想要显示的数据,该数据是由用户在索引页面选择的某些参数过滤的。
这是用户点击按钮后执行的javascript函数:
function FilterByUserRequestedValues() {
// Some code here
$.get("/PersonalArea/FilterPurchases", { 'dateFilter': dateFilter, 'selectedCategories': selectedCategories, 'selectedProducts': selectedProducts }, function (data) {
$('#filteredResultsDiv').html = data;
}, 'html');
我的目标是调用FilterPurchases方法,如下所示:
public ActionResult FilterPurchases(DateTime? dateFilter, string selectedCategories, string selectedProducts)
{
SetViewModel(dateFilter, selectedCategories, selectedProducts);
return PartialView("_filteredResultsPartial", viewModel);
}
当jquery-get执行时,正在调用FilterPurchase并且正如预期的那样,我可以看到对部分cshtml的调用,并且数据已经过滤,但是索引页面视图没有被重新加载,也没有被filterResultsDiv。
当我尝试在谷歌浏览器中调试它时,我认为它根本没有进入回调功能。 然而,即使它确实如此,它会起作用吗?
答案 0 :(得分:2)
.html
是jQuery中的一个函数,而不是一个可以赋值的属性。
所以而不是:
$('#filteredResultsDiv').html = data;
你应该在你的回调中使用它:
$('#filteredResultsDiv').html(data);
此外,由于您向同一资源发出GET请求,因此浏览器可能已缓存结果,您可能看不到实际发出的任何请求。要解决此问题,您可以使用$ .ajax函数,该函数具有针对此情况的特殊设置:
$.ajax({
url: '',
type: 'GET',
cache: false,
data: {
dateFilter: dateFilter,
selectedCategories: selectedCategories,
selectedProducts: selectedProducts
},
success: function(data) {
$('#filteredResultsDiv').html(data);
}
});
这将为每个AJAX请求附加一个唯一的查询字符串参数,以确保它不会被浏览器缓存,并且您的控制器操作将始终被命中,您将从服务器获取新数据。