WebGrid筛选器页面更改时丢失的复选框值

时间:2013-02-27 16:49:39

标签: asp.net-mvc checkbox pagination filtering webgrid

我在我的MVC应用程序中使用WebGrid和View Model。我的Viewmodel有一个名为“ companiesfilter ”的int []成员,可以从公司复选框列表中搜索用户的多个选择来搜索产品数据库。

ViewModel将由Ajax.BeginForm发送到控制器,控制器将返回带有产品列表的SAME视图模型,以填充部分视图,该视图主要是Webgrid和分页(服务器端分页)。

当我检查一些框,单击提交按钮并正确获得结果时,它运行良好。问题是,当我点击WebGrid中的下一页时,它在Controller端的 companiesfilter 中丢失了我的多选值。

通过调试,我发现View确实正确地向数据发送了 companiesfilter ,但是在填充控制器的viewmodel时MVC无法绑定数据。谁能告诉我为什么?

最有趣的是,如果我将companiesfilter改为string [],它就有效。但是,当Webgrid进行分页时,MVC向公司过滤器[0]提供“1,4,5”,而不是我认为公司过滤器[0] =“1”,companiesfilter [1] =“4”,companiesfilter [2] =“ 5" 。为什么会这样?

有任何解决此问题的建议吗?我更喜欢使用int [],而不是string []。谢谢!

这是我的代码供参考。

public class ProductSearchViewModel
{
    public List<Company> CompanyFullList { get; set; }
    public int[] CompaniesFilter { get; set; }
    //Search Result
    public IEnumerable<ProductInfor> ProductList { get; set; }
}

public ActionResult M_ProductSearchIndex(ProductSearchViewModel searchViewModel)
{
    search database...

    if (Request.IsAjaxRequest())
    {
        return PartialView("_M_ProductSearchResult", searchViewModel);
    }
    else
    {
        return View(searchViewModel);
    }        
}

我的观点:

@model MyApp.Models.ViewModels.ProductSearchViewModel
<div id="CompaniesChkboxs">
@foreach (var company in Model.CompanyFullList)
{
    <input type="checkbox" name="CompaniesFilter" value="@company.Id", @(Html.Raw(company.Selected ? "checked=\"checked\"" : "")) /> @company.CompanyName
}
</div>

@Html.Partial("_U_ProductSearchResult", Model)

0 个答案:

没有答案