我在我的 MVC 应用程序中使用 WebGrid 和 View Model。我的 Viewmodel 有一个名为“ companyfilter ”的 int[] 成员,可以从公司复选框列表中获取用户的多项选择来搜索产品数据库。
ViewModel 将通过 Ajax.BeginForm 发送到控制器,控制器将返回带有产品列表的 SAME 视图模型,以填充主要是 Webgrid 和分页(服务器端分页)的部分视图。
当我选中一些框,单击提交按钮并正确获得结果时,它运行良好。问题是,当我单击 WebGrid 中的下一页时,它在 Controller 端的companyfilter中丢失了我的多选值。
通过调试,我发现 View 确实正确地发回了带有数据的公司过滤器,但是 MVC 在填充控制器的视图模型时未能绑定数据。谁能告诉我为什么?
最有趣的是,如果我将 companyfilter 更改为 string[ ],它会起作用。但是,当 Webgrid 进行分页时,MVC 为 companyfilter[0] 提供“1, 4, 5”,而不是我认为 companyfilter[0] = “1”,companyfilter[1] = “4”,companyfilter[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)