Путаница в модели совместного поиска MVC3 - PullRequest
0 голосов
/ 05 сентября 2011

(не мог придумать лучшего названия, извините)

Итак, у меня есть страница макета, на этой странице есть панель поиска + опции. Выбор чего-либо, должен привести вас на страницу поиска, с результатами и т. Д. Довольно стандартно. Чтобы я работал, я создал класс MasterModel с членом класса SearchDataModel. SearchDataModel содержит различные параметры для поиска (поисковый запрос, какие поля для поиска и т. Д.).

Затем я строго ввел свою страницу макета в класс MasterModel и, используя Html.BeginForm..., создал для него форму поиска. Однако все флажки, относящиеся к полям, по умолчанию не отмечены, даже если для всех полей установлено значение по умолчанию (через частную настройку получения / установки).

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

Размещение точек останова в ключевых местах, кажется, показывает, что модель не изолирована на запросах get, только сообщение в контроллер поиска?

Возможно, я все делаю неправильно, поэтому, если это так, указатели правильного пути всегда приветствуются.

public class MasterModel {
    public SearchDataModel SearchModel { get; set; }
}

public class SearchDataModel{
    private bool _OnTags = true;
    private bool _OnManufacturers = true;
    private bool _OnCountries = true;

    [Display(Name= "Tags")]
    public bool OnTags {
        get { return _OnTags; }
        set { _OnTags = value; }
    }
    [Display(Name= "Manufacturers")]
    public bool OnManufacturers {
        get { return _OnManufacturers; }
        set { _OnManufacturers = value; }
    }
    [Display(Name= "Countries")]
    public bool OnCountries {
        get { return _OnCountries; }
        set { _OnCountries = value; }
    }
    [Required]
    [Display(Name="Search Term:")]
    public string SearchTerm { get; set; }
}

Затем на странице _layout:

                            @Html.CheckBoxFor(m => m.SearchModel.OnTags, new { @class="ddlCheckbox", @id="inpCheckboxTag" })
                            @Html.LabelFor(m =>m.SearchModel.OnTags)

1 Ответ

1 голос
/ 05 сентября 2011

Убедитесь, что вы возвращаете MasterModel с инициализированным SearchModel из ваших представлений:

public ActionResult Index()
{
    var model = new MasterModel
    {
        SearchModel = new SearchDataModel()
    };
    return View(model);
}

Еще одна возможность реализовать эту функцию, кроме строгой типизации вашего основного макета для модели представления, - это использование * 1006.* как показал Фил Хаак в своем блоге .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...