Измененные логические значения не передаются в методе контроллера из комплексной связанной модели

Я пытаюсь создать поисковую систему для части приложения, и мне нужна помощь. Я использую MVC 4, и я не знаю, почему мой флажок всегда возвращает "истинные" значения.

У меня есть эти разные вещи, которые я использую:

Во-первых, модель поиска:

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>(); объект. StoreViewModel этот вид объекта:

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; }

Итак, да, вместо моего метода построения списка моделей представлений я создал отдельные bools для каждого магазина, который у меня есть. Так что в основном мой взгляд сейчас выглядит так:

<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>

И я получаю правильное проверенное значение, но оно ужасно, и мне нужно будет идти и изменять его каждый раз, когда у меня будет новый магазин. Так что, в принципе, мой вопрос остается без ответа...

0 ответов

Другие вопросы по тегам