1

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

0 回答 0