ModelState на пользовательском членстве провайдера - PullRequest
0 голосов
/ 24 января 2011

Я реализовал пользовательский поставщик членства и имею следующий класс;

public class ProfileCommon : ProfileBase
{
    #region Members
    [Required(ErrorMessage="Required")]
    public virtual string Title
    {
        get { return ((string)(this.GetPropertyValue("Title"))); }
        set { this.SetPropertyValue("Title", value); }
    }

Затем я в своем контроллере хочу сделать следующее:

    [HttpPost]
    [Authorize]
    public ActionResult EditInvestorRegistration(FormCollection collection)
    {
        ProfileCommon profileCommon= new ProfileCommon();
        TryUpdateModel(profileCommon);

Это не удается, если заголовок не включен в сообщение об ошибке;

Средство доступа свойства 'Title' для объекта 'Models.ProfileCommon' вызвало следующее исключение: 'Свойство настроек' Title 'не найдено.'

Если я избавлюсь от атрибута [Required..., он будет работать нормально, но теперь у меня больше нет автоматической проверки моего объекта.

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

Есть идеи?

1 Ответ

1 голос
/ 24 января 2011

Кажется странным, что вы используете пользовательский класс профиля в качестве ввода действия вместо модели вида:

public class ProfileViewModel
{
    [Required]
    public string Title { get; set; }
}

, и тогда в вашем контроллере вы можете использовать AutoMapper для преобразования между моделью представления и модельюкласс, который будет обновлять профиль:

[HttpPost]
[Authorize]
public ActionResult EditInvestorRegistration(ProfileViewModel profileViewModel)
{
    ProfileCommon profileCommon = AutoMapper.Map<ProfileViewModel, ProfileCommon>(profileViewModel);
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...