我在我的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)