Каков наилучший способ передачи данных модели и FormCollection на мой пост-контроллер MVC 3 - PullRequest
2 голосов
/ 24 августа 2011

Обычно при получении данных формы в контроллере я бы использовал:

public ActionResult Edit(int id, FormCollection formValues)

У меня есть представление, которое привязано к модели, но также включает некоторые элементы, не привязанные к модели, и я думал, что смогу получить к ним доступ через FormCollection как

public ActionResult Edit(int id, MyModel objModel, FormCollection formValues)

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

Ответы [ 3 ]

0 голосов
/ 24 августа 2011

Это не способ работать.Вы не должны использовать модель вашей базы данных непосредственно в вашем View.

Вы должны передать ViewModel .Таким образом, вы можете передать свою модель и дополнительные свойства.

public class MyViewModel
{

// All the properties for your model.

// All other properties needed and not attached to your model

}

В действии Post в вашем контроллере вы можете получить MyViewModel и просто создать свою модель со свойствами внутри ViewModel.

Проверьте этот пост для получения дополнительной информации:

http://blogs.msdn.com/b/simonince/archive/2010/01/26/view-models-in-asp-net-mvc.aspx

0 голосов
/ 25 августа 2011

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

Ваш вопрос касается параметров, которые передаются в действия контроллера. У вас есть контроллер для редактирования чего-либо.

Существует Edit GET, где вы делаете что-то вроде этого:

  1. Чтение данных из базы данных
  2. Оберните его в объект
  3. Передать этот объект в представление, в котором будет отображаться объект

Существует Edit POST, который хочет получать данные и записывать изменения в базу данных. Так что вам нужно, чтобы это произошло? Вам нужен идентификатор и комбинация полей, которые вы хотите обновить. Передача FormCollection и что-то еще означает, что вам нужно отобразить значения из FormCollection в вашу модель домена. Это трудоемкая и повторяющаяся задача.

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

Функция привязки данных в инфраструктуре MVC 3 автоматически сопоставляет поля из формы с вашей моделью, используя умное отражение.

То, что вы делаете, - это своего рода работа, и это отличный способ учиться. Так что не сдавайся. Refactor, посмотрите, можете ли вы передать один объект и работать с ним.

Удачи

0 голосов
/ 24 августа 2011

Если это сообщение, вам нужно пометить метод атрибутом HttpPost.

[HttpPost]
public ActionResult Edit(int id, FormCollection formValues)
{
    var objModel = new MyModel();
    // updates model here
    TryUpdateModel(objModel);
}

На ваш взгляд, вы получите что-то вроде:

@model MyModel
... some html here
<fieldset>
   <legend>MyModel Information</legend>

   @Html.EditorForModel()
</fieldset>

Таким образом, вы можете редактировать поля модели с помощью EditorForModel и получать эти значения с помощью TryUpdateModel.Отметив, что у вас все еще есть доступ к вашему FormCollection объекту.

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