Связывание модели общего типа и атрибут BindAttribute - PullRequest
0 голосов
/ 12 мая 2009

У меня проблема с атрибутом bind в asp.net mvc. У меня есть пользовательская ViewModel, которая выглядит так:

public interface IUserView<TUser> where TUser : User
{
    TUser User { get; set; }
    string Email { get; set; }
    string ConfirmEmail { get; set; }
    string Password { get; set; }
    string ConfirmPassword { get; set; }
}
public class EditUserView<TUser> : IUserView<TUser> where TUser : User
{
    public virtual TUser User { get; set; }

    [ValidateRegExp(RegexConstants.Email, "Invalid Email.")]
    [ValidateNonEmpty("email is required.")]
    public virtual string Email { get; set; }

    [ValidateSameAs("Email", "confirmation email does not match.")]
    public virtual string ConfirmEmail { get; set; }


    public virtual string Password { get; set; }

    [ValidateSameAs("Password", "confirmation password does not match.")]
    public virtual string ConfirmPassword { get; set; }
}

и способ отправки этого, который выглядит следующим образом:

public ActionResult SubmitProfile([Bind(Exclude="IsSystemAdmin")]EditUserView<Admin> iuserview)

если вы посмотрите на вышеупомянутый метод, вы заметите атрибут связывания с 'Exclude = "IsSystemAdmin"'. Модель администратора имеет логическое свойство с именем «IsSystemAdmin», которое повышает уровень их разрешений. Теперь, очевидно, я не хочу, чтобы администратор мог сделать себя системным администратором, просто отправив верное значение для этого поля.

Я пробовал "IsSystemAdmin" и "User.IsSystemAdmin" в свойстве exclude, и ни один из них не мешает обновлению переменной IsSystemAdmin. Есть ли способ заставить атрибут связывания работать в этом сценарии, или это ошибка в связывателе модели по умолчанию?

1 Ответ

1 голос
/ 08 августа 2009

Вы пытались использовать атрибут Bind для самого класса TUser

[Bind(Exclude = "IsSysAdmin")]
public class TUser 
{

}

Я думаю, что из-за важности этого свойства вы никогда не захотите, чтобы оно устанавливалось связывателем модели, и, следовательно, связывание с классом будет в порядке. Скорее всего, вы увеличите Admin до sysadmin, явно установив флажок для действия.

Я очень опасаюсь связывать любые классы Model напрямую с постов форм. У меня есть определенные классы форм для классов связывания и обновления в моем уровне хранилища только через другой уровень обслуживания.

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