在jquery ajax get之后重新加载MVC部分页面

时间:2014-01-03 20:42:51

标签: jquery ajax asp.net-mvc

我是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。

当我尝试在谷歌浏览器中调试它时,我认为它根本没有进入回调功能。 然而,即使它确实如此,它会起作用吗?

1 个答案:

答案 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请求附加一个唯一的查询字符串参数,以确保它不会被浏览器缓存,并且您的控制器操作将始终被命中,您将从服务器获取新数据。