Проверка ASP.NET MVC для столбца, которого нет в базе данных - PullRequest
1 голос
/ 09 мая 2011

Итак, в моей базе данных есть следующая таблица:

Account [Id (PK, int), Name(string), Password(string)]

Я использую модель данных сущности ADO.NET (.edmx) и генератор отслеживаемых сущностей ADO.NET для автоматической генерации моих моделей.

Я хочу создать учетную запись / создать страницу для пользователей, чтобы создать новую учетную запись на моем веб-сайте.Очевидно, что я хочу иметь как поле пароля, так и поле verifyPassword для проверки ввода пользователя.У меня есть следующая модель проверки:

namespace MD5DatabaseTest.Models
{
    [MetadataType(typeof(AccountMetaData))]
    public partial class Account {}
    public class AccountMetaData
    {
        public int Id { get; set; }

        [Required(ErrorMessage = "Please type a username")]
        public String Name{ get; set; }

        [Required(ErrorMessage = "Please type a password")]
        public String Password { get; set; }   

        [Required(ErrorMessage = "Please confirm your password")]
        [Compare("Password", ErrorMessage = "Passwords do not match")]
        public String ConfirmPassword{ get; set; }
    }
}

Поскольку в моей базе данных нет столбца ConfirmPassword, мой код Create.cshtml здесь явно не работает:

<div class="editor-label">
            Confirm your password
        </div>
        <div class="editor-field">
            @Html.Password("ConfirmPassword")
            @Html.ValidationMessageFor(model => model.ConfirmPassword)
        </div>

Возможнопроверить это с помощью аннотаций данных MVC 3?Или мне нужно написать отдельную функцию Jscript для (клиентской) проверки?

Ответы [ 2 ]

1 голос
/ 09 мая 2011

Модель! = ViewModel.

Вы не должны использовать объекты модели непосредственно в своих представлениях.Создайте ViewModel, специфичную для вашей страницы создания учетной записи (со свойством ConfirmPassword, подобным тому, которое у вас есть в вашем вопросе), и в функции контроллера Create скопируйте значения из ViewModel в модель вашего домена (которая не имеетСвойство ConfirmPassword) и сохраните его.

Поскольку в моей базе данных нет столбца ConfirmPassword, мой код Create.cshtml явно не работает

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

Если у вас есть атрибуты проверки в вашей ViewModel, они будут соблюдаться, их не нужно связывать с полем в базе данных.

На самом деле MVC - это разделение проблем.Представление не должно ничего знать о базе данных, только о модели.И модель, в свою очередь, знает о базе данных, но это не значит, что она должна иметь отображение 1 на 1. С этой базой данных.

Надеюсь, мое объяснение немного ясное.Дайте мне знать, если нет, и я постараюсь уточнить.

0 голосов
/ 13 августа 2015

Как модель! = ViewModel, даже если вы хотите использовать в качестве модели, вы можете попробовать атрибут

[NotMapped]

для вашего свойства "ConfirmPassword".По вашему мнению, вы можете поставить вручную свой блок ConfirmPassword.Не очень, но все будет работать так, как вы ожидали.

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