Custom Membership provider上的ModelState

时间:2011-01-24 05:13:29

标签: asp.net-mvc data-annotations membership-provider

我已经实现了自定义成员资格提供程序并拥有以下类;

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);

如果错误中不包含标题,则此类失败;

  对象'Models.ProfileCommon'上的属性访问者'Title'引发了以下异常:'找不到设置属性'Title'。'

如果我摆脱属性[Required...它可以正常工作但现在我不再对我的对象进行自动验证。

现在,我知道我可以一次检查每个属性并解决问题,但我非常希望使用DataAnnotations为我做这项工作。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您使用自定义配置文件类作为操作输入而不是视图模型似乎很奇怪:

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

然后在您的控制器中,您可以使用AutoMapper在视图模型和将更新配置文件的模型类之间进行转换:

[HttpPost]
[Authorize]
public ActionResult EditInvestorRegistration(ProfileViewModel profileViewModel)
{
    ProfileCommon profileCommon = AutoMapper.Map<ProfileViewModel, ProfileCommon>(profileViewModel);
    ...
}