MVC передает данные из представления в cotroller - PullRequest
2 голосов
/ 14 июня 2011

У меня небольшая проблема с передачей данных из представления в контроллер. Это небольшой сайт CRUD, вот код, объясняющий мою проблему.

Model:  
public class TempModel{
     public List<Temp> Temp1 { get; set; }
}

View:  
@{ using (Html.BeginForm()) {
   for (int i = 0; i < TempModel.Temp1.Count; i++)
   {
        @Html.LabelFor(model => model.Temp[i].ModifiedBy, "Modified By: ")
        @Html.TextBoxFor(model => model.Temp[i].ModifiedBy)

       <button name="button" value="update">Update</button>
   }
} 

Controller:
[HttpPost]
    public ActionResult Index(TempModel.Temp1, string button){

    switch (button)
        {
            case "delete":
                break;
            case "update":
                UpdateSingleTemp(TempModel.Temp1);
                break;
        }
}

Теперь я хочу передать, какой из этих объектов Temp1 [i] был изменен при обновлении пользователем. Должен быть простой способ сообщить контроллеру ItemId или dataIsChanged или что-то в этом роде, но сейчас я просто не могу понять. Я довольно новичок в MVC.

EDIT: Мне удалось решить эту проблему. Самым простым способом было просто использовать несколько форм и удалить List из модели.

 @for (int i = 0; i < TempModel.Count; i++)     
   @{ using (Html.BeginForm()) {        
   {
        @Html.LabelFor(model => model[i].ModifiedBy, "Modified By: ")
        @Html.TextBoxFor(model => model[i].ModifiedBy)

       <button name="button" value="update">Update</button>
   }
} 

Ответы [ 2 ]

1 голос
/ 14 июня 2011

Это невозможно напрямую.Чтобы отследить, какое поле обновлено или нет, вы должны сохранить хеш каждого поля и после обратной отправки сравнить хеш с хешем переданного значения, так же как WebShms хранит ViewState на страницах.В зависимости от того, какое поле обновлено, вы можете запустить метод обновления на основе обновленных полей.

0 голосов
/ 14 июня 2011

Для простоты вы можете использовать Атрибут ввода HTML отключен .Отключенные поля не публикуются на сервере, поэтому пользователь пытается обновить все элементы, которые получает контроллер.Но остерегайтесь использования этого с конфиденциальной информацией, поскольку веб-сервер не должен доверять предоставленным пользователем значениям - пользователь может просто включить все поля и опубликовать их.Этот метод полезен, если вы хотите знать, какие значения пользователь пытался редактировать, и перезапись репозитория новыми значениями не вызовет проблем.С конфиденциальной информацией, проверка изменений должна выполняться на стороне сервера, как советует @Adeel.В первый раз визуализируйте все входные данные с отключенным атрибутом, затем предоставьте каждому редактируемому полю дополнительную кнопку для их включения.Для рендеринга с отключенным атрибутом используйте This Overload

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