2012-04-12 1 views
2

Мой последний вопрос в том, должен ли модель связующего заполнить все модели модели или только биты, которые отправляются, оставляя контроллер заполнять остальные?MVC Свойства модели

Например, я добавляю продукт в свою систему и в форму, которую я хочу, чтобы пользователь определил, на каких сайтах появится новый продукт. Поэтому в моей модели я хочу заполнить коллекцию под названием «AllAvailableSites», чтобы отобразить флажки для пользователя на выбор. Мне также нужно заполнить модель любыми выбранными сайтами на почте в случае, если форма не подтверждается, и мне нужно представить форму, показывающую начальные выборы. Казалось бы, я должен позволить привязке модели установить выбранные сайты на модели, и (однажды в методе контроллера) я установил «AllAvailableSites» в модели. Правильно ли это звучит? Кажется более эффективным установить все в связующем устройстве, но кто-то говорит, что это не совсем правильно.

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

Кроме того, мне действительно нужна версия GET и POST метода? Разве они не могут взять ту же модель взгляда? Затем я проверяю свое связующее устройство, если оно является GET/POST, и заполняет все модели соответственно.

+0

Можете ли вы сказать, что что-то было GET'd или POST'd? Изменить: да, вы можете http://stackoverflow.com/questions/8629624/how-can-i-tell-if-a-method-is-a-result-of-a-get-or-a-post-from -inide-my-mvc-act Еще ужасная идея imo – glosrob

+0

Можете ли вы опубликовать свои методы GET и POST? – mattytommo

ответ

0

Ваш первоначальный вывод звучит. Модельное связующее должно беспокоиться только о создании экземпляра модели и заполнении ее свойств со значениями, доступными ей из контекста действия (например, значения post), а затем выполнения проверки. Затем ваш диспетчер отвечает за заполнение любых дополнительных значений, необходимых для представления, таких как список доступных сайтов.

Я не совсем уверен, что вы имеете в виду, нуждаясь в отдельных методах GET/POST. Если вы сохраняете или создаете экземпляр модели, вы должны публиковать ее, поэтому, похоже, часть GET не имеет значения. Если вы имеете в виду что-то вроде:

[HttpGet, ActionName("Edit")] 
public ActionResult Edit(MyModel model) 
{ 
    return View(model); 
} 

[HttpPost, ActionName("Edit")] 
public ActionResult SaveEdit(MyModel model) 
{ 
    // validate and save, then 
    return View(model); 
} 

Может быть, вы хотите знать, если вы можете просто объединить их в одно действие и просто выяснить, если они смотрят на форму редактирования или публикации результатов в форме редактирования в действии. Я бы настоятельно рекомендовал вам не делать этого. Существует множество причин, но давайте просто держим его в этом; не делай этого.

+0

Благодарим за отзыв. Чтобы уточнить, с помощью отдельных методов GET/POST я имел в виду то, что вы сделали, имея отдельный метод контроллера для редактирования, когда GET или POST. Я задаюсь вопросом о вашей версии метода редактирования GET, потому что он принимает экземпляр модели, который будет проходить через мой класс связующего класса, даже если он является GET, но ничего не будет заполнено. Могу ли я проверить, является ли его GET/POST в моем модельном переплете и избавить его от необходимости проверять вещи, которых там нет? Я предполагаю, что контроллер затем загружает объект из БД, а не в качестве связующего? – Richard

+0

Вы можете, но вам не придется этого делать. Он должен пропустить свойства, для которых он не имеет значений. Связующие обычно используют ValueProvider, который может анализировать значения из сообщения формы, сообщения JSON, аргументов строки запроса и т. Д. Связующее должно пройти через каждое подходящее свойство модели и попытаться получить значение от ValueProvider. Если его нет, он должен пропустить его. – HackedByChinese

+0

Хм, и я просто проверил Request.Form в моем подшивке. Im сдержанно использовать привязку по умолчанию, потому что моя форма довольно сложна, и большинство элементов управления на ней будут дублироваться (т. Е. Если мой продукт будет отображаться на трех сайтах, то описание может варьироваться для каждого из них, и поэтому у меня есть 3 элемента управления в моей форме называемые Description_Site1, Description_Site2 и т. д.).Количество сайтов может варьироваться, поэтому у модели не может быть простого свойства для каждого, нужен список. Кроме того, есть сетка, которая появляется позже на странице, которая может добавить дополнительные строки на лету - я просто не доверяю стандарту modelbinder .... должен ли я? – Richard