アプリの一部の検索エンジンを構築しようとしていますが、助けが必要です。MVC 4 を使用していますが、checkboxfor が常に「true」の値を返す理由がわかりません。
私が使用しているこれらの異なるアイテムがあります:
まず、検索モデル:
public class SearchBackstoreInventoryPartial
{
[RegularExpression(@"^[a-zA-Z0-9\',;/\)\(\-\. ]*$", ErrorMessage = "Input is invalid.")]
public string mCardName { get; set; }
public decimal mBackstorePrice { get; set; }
public string mBackstorePriceSymbol { get; set; }
public int mBackstoreQty { get; set; }
public string mBackstoreQtySymbol { get; set; }
public int mBackstoreSoldQty { get; set; }
public string mBackstoreSoldSymbol { get; set; }
public decimal mBackstoreDiscount { get; set; }
public string mBackstoreDiscountSymbol { get; set; }
public IEnumerable<SelectListItem> mSymbolList { get; set; }
public List<StoreViewModel> mListStores = new List<StoreViewModel>();
private readonly StoresManager mStoresManager = new StoresManager();
public SearchBackstoreInventoryPartial()
{
mSymbolList = new SelectList(ValueDomain.LIST_METHODS);
List<StoreInfo> listStores = mStoresManager.ListStores();
foreach (StoreViewModel itemToAdd in listStores.Select(_store => new StoreViewModel
{
mStore = _store,
mIsSelected = true
}))
{
mListStores.Add(itemToAdd);
}
}
そこにあるほとんどすべてを無視できます。私は主にpublic List<StoreViewModel> mListStores = new List<StoreViewModel>();
オブジェクトに焦点を当てています。AStoreViewModel
は次のようなオブジェクトです。
public class StoreViewModel
{
public StoreInfo mStore { get; set; }
public bool mIsSelected { get; set; }
}
したがって、基本的に、アプリにあるすべてのストアについて、それを保存し、mIsSelected を に配置しtrue
ます。
次に、次のようなページをレンダリングします。
@model MvcMagicAdmin.Utilities.SearchModels.SearchBackstoreInventoryPartial
@using(Html.BeginForm())
{
<div class="formStyle defaultBaseStyle baseFontSize">
<div class="center">
<div>
<div class="float-left">Stores:</div>
<div class="float-right">
@for (int i = 0; i < Model.mListStores.Count; i++)
{
<div class="float-left"style="padding: 1px; margin: 1px">
@Model.mListStores[i].mStore.mStoreName
</div>
<div class="float-right"style="padding: 1px; margin: 1px">
@Html.CheckBoxFor(_item => _item.mListStores[i].mIsSelected)
</div>
<div class="clear"></div>
}
</div>
<div class="clear"></div>
</div>
<div>
<div class="float-left">
Card Name:
</div>
<div class="float-right">
@Html.TextBoxFor(_item => _item.mCardName)
@Html.ValidationMessageFor(_item => _item.mCardName)
</div>
<div class="clear"></div>
</div>
<div>
<div class="float-left">
Backstore Item Price
</div>
<div class="float-right">
@Html.DropDownListFor(_item => _item.mBackstorePriceSymbol, Model.mSymbolList, "---Select a value---")
@Html.TextBoxFor(_item => _item.mBackstorePrice, new { @class = "positive" } )
</div>
<div class="clear"></div>
</div>
<div>
<div class="float-left">
Backstore Quantity in stock
</div>
<div class="float-right">
@Html.DropDownListFor(_item => _item.mBackstoreQtySymbol, Model.mSymbolList, "---Select a value---")
@Html.TextBoxFor(_item => _item.mBackstoreQty, new { @class = "positive-integer" } )
</div>
<div class="clear"></div>
</div>
<div>
<div class="float-left">
Backstore Item sold
</div>
<div class="float-right">
@Html.DropDownListFor(_item => _item.mBackstoreSoldSymbol, Model.mSymbolList, "---Select a value---")
@Html.TextBoxFor(_item => _item.mBackstoreSoldQty, new { @class = "positive-integer"})
</div>
<div class="clear"></div>
</div>
<div>
<div class="float-left">
Backstore Item discount
</div>
<div class="float-right">
@Html.DropDownListFor(_item => _item.mBackstoreDiscountSymbol, Model.mSymbolList, "---Select a value---")
@Html.TextBoxFor(_item => _item.mBackstoreDiscount, new { @class = "positive"})
</div>
<div class="clear"></div>
</div>
</div>
<input type="submit" value="Go" class="buttonField"/>
<div class="clear"></div>
</div>
}
そして、私のコントローラーメソッド:
[HttpPost]
public ActionResult SearchBackstoreInventory(SearchBackstoreInventoryPartial _searchBackstore)
{
// Do some work here...
}
チェックボックスはデフォルトでチェックされていますが、チェックを外しても値は true のままです。なぜこれが機能しないのか、誰かが私を理解するのを手伝ってくれますか?
編集
私のビューでのループのレンダリングは次のとおりです。
<div class="float-right">
<div class="float-left"style="padding: 1px; margin: 1px">
FinePlaySet.com
</div>
<div class="float-right"style="padding: 1px; margin: 1px">
<input checked="checked" id="mListStores_0__mIsSelected" name="mListStores[0].mIsSelected" type="checkbox" value="true" /><input name="mListStores[0].mIsSelected" type="hidden" value="false" />
</div>
<div class="clear"></div>
<div class="float-left"style="padding: 1px; margin: 1px">
EbayAuctions
</div>
<div class="float-right"style="padding: 1px; margin: 1px">
<input checked="checked" id="mListStores_1__mIsSelected" name="mListStores[1].mIsSelected" type="checkbox" value="true" /><input name="mListStores[1].mIsSelected" type="hidden" value="false" />
</div>
<div class="clear"></div>
<div class="float-left"style="padding: 1px; margin: 1px">
Strawberry Fields
</div>
<div class="float-right"style="padding: 1px; margin: 1px">
<input checked="checked" id="mListStores_2__mIsSelected" name="mListStores[2].mIsSelected" type="checkbox" value="true" /><input name="mListStores[2].mIsSelected" type="hidden" value="false" />
</div>
<div class="clear"></div>
</div>
編集2
次のように、モデルを別の方法で構築しようとしました。
public bool mFinePlaySet { get; set; }
public bool mEbayAuctions { get; set; }
そうです、ビュー モデルのリストを作成する方法の代わりに、私が持っているストアごとに単一のブール値を作成しました。したがって、基本的に私のビューは次のようにレンダリングされます。
<div>
<div class="float-left">Stores:</div>
<div class="float-right">
<p>FinePlaySet.com : @Html.CheckBoxFor(_item => _item.mFinePlaySet)</p>
<p>eBay Auctions: @Html.CheckBoxFor(_item => _item.mEbayAuctions)</p>
</div>
<div class="clear"></div>
</div>
そして、正しいチェック値を取得しますが、見苦しく、新しいストアを作成するたびに変更する必要があります。したがって、基本的に、私の質問は未回答のままです...