MVC アプリケーションで WebGrid と View Model を使用しています。私のViewmodelには、「companyfilter」と呼ばれるint []メンバーがあり、会社のチェックボックスリストからユーザーの複数選択を取得して製品データベースを検索します。
ViewModel は Ajax.BeginForm によってコントローラーに送信され、コントローラーは製品リストを含む同じビューモデルを返し、主に Webgrid でページングされた (サーバー側のページング) 部分ビューを作成します。
いくつかのボックスをチェックして送信ボタンをクリックし、結果を正しく取得するとうまくいきます。問題は、WebGrid で次のページをクリックすると、Controller 側のcompanyfilterで複数選択された値が失われることです。
デバッグによって、View はcompanyfilterにデータを正しく送り返したことがわかりましたが、MVC はコントローラーのビューモデルにデータを入力するときにデータをバインドできませんでした。誰か教えてくれませんか?
最も興味深いのは、companysfilter を string[ ] に変更すると機能することです。ただし、Webgrid がページングを行う場合、MVC は companiesfilter[0] に「1, 4, 5」をフィードします。 5". なぜこのように振る舞うのですか?
この問題を解決するための提案はありますか? string[ ] ではなく int[ ] を使用することを好みます。ありがとう!
参照用の私のコードは次のとおりです。
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)