Как использовать ту же модель с меньшим количеством полей для другого представления в mvc5 - PullRequest
0 голосов
/ 20 октября 2019

Мой вопрос не относится к тому, как использовать две модели на одном и том же бритве! в основном у меня есть пользовательская таблица, в которой у меня есть такие поля, как (идентификатор пользователя, имя, адрес электронной почты, пароль, пол, страна, отдел, IsActive), и моя форма работает нормально, я могу вставить обновление и удалить, я не использую EF, чтоя создал таблицу на сервере sql и создал модель в папке модели, на мой взгляд, для всех этих столбцов я поставил обязательный валидатор полей, и их необходимо вводить при вставке или обновлении. Теперь я хочу иметь другое представление с другим контроллером, где я не хочу показывать все 8 полей, вместо этого хочу показать только эти четыре столбца (имя пользователя, адрес электронной почты, пол, IsActive), когда я использую ту же модель для другого контроллера и представлениязатем он корректно загружает запись в представлении индекса, но когда я обновляю требуемое, запускается ошибка проверки, так как все мои поля помечены как обязательные, поэтому он также просит ввести значение остальных четырех полей.

У меня естьпопытался удалить эти ненужные поля из модели в коде контроллера перед сохранением с помощью Bind ([Исключить] "" ""), но это не сработало. Я пробовал modelstate.remove (""), этот подход прекрасно работает для всех полей, но мое поле пароля все еще выдает ошибку проверки. кто-то говорит, что вам нужно использовать viewmodel, и в viewmodel вы должны поместить как свою модель, так и полную модель, и маленькую модель, я хочу спросить, как моя маленькая модель будет отображаться в моей пользовательской таблице (как table ["tableName"] thisне может быть применен к двум моделям и указывает на одну и ту же таблицу без отношения первичного внешнего ключа. Поделитесь примером, пожалуйста, я запутался

modelState.Remove("Password")

Это удаляет все значения модели, которые не нужны, но не удаляет поле пароля, которое даетошибка при обновлении

1 Ответ

0 голосов
/ 21 октября 2019

В обязательных полях отсутствуют данные или некоторые поля не являются нулевыми при сохранении. То, что вы пытаетесь сделать, совершенно нормально. Вы в основном используете виртуальную модель. Это то чем я занимаюсь. В «get» вы исправляете свою модель и отправляете ее на просмотр. Вы работаете с ним, а затем при отправке вы получаете модель в «посте», но в ней пропущено несколько ОБЯЗАТЕЛЬНЫХ полей. Итак, вам нужно извлечь ту же запись из базы данных, обновить 3 или 4 поля из модели представления и затем сохранить ту модель, которую вы получили, с новыми данными. Это один из способов. (VM = модель представления)

1. send VM to view
2. add data in the view
3. submit
4. receive VM in POST Controller
5. get same record from DB 
6. update the particular fields using the VM data 
7. save the updated record to database. This is the record you retrieved in 5.

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

@Html.Hidefor( x=> x.NameOfField)

. Это обеспечит отправку поля для публикации. Любое поле с [Обязательным] ... обязательно для заполнения. Вы не можете пропустить это!

Как ваша маленькая модель будет отображаться в базе данных. Он не будет. Вы перенесете данные из маленькой модели в модель, которая отображается в базе данных ... со ВСЕМИ полями. Либо вы получаете пропущенные значения из базы данных или из представления с помощью Hidefor. пример

  dbmodel.Field1 = vm.field1;
  dbmodel.Field2 = vm.field2;
  dbmodel.Field3 = vm.field3;

Надеюсь, это поможет

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