索引视图中的MVC3编辑

时间:2012-01-29 15:49:46

标签: asp.net-mvc-3 view model

我需要一些帮助......

我有这个简单的模型:

public class Candidat 
{

    public string LoginEmail { get; set; }

    [Required]
    [DataType(DataType.Text)]
    [Display(Name = "Prénom")]
    public string FirstName { get; set; }

    [Required]
    [DataType(DataType.Text)]
    [Display(Name = "Nom")]
    public string LastName { get; set; }
}

我也有这样的控制器:

        [Authorize]
    public ActionResult Index(Candidat model)
    {
        if (model.LoginEmail == null)
        {
            model = null;
            using (var db = new rhDB())
            {
                MembershipUser user = Membership.GetUser();
                if (user != null)
                {
                    model = (from m in db.Candidates where m.LoginEmail == user.Email select m).SingleOrDefault();
                }

                if (model == null)
                {
                    model = new Candidat();
                    model.LoginEmail = user.Email;
                    model.Email = user.Email;
                }

            }
        }

        return View("MyProfileCandidate", model);
    }

如您所见,我检查用户是否为数据库中的现有记录。如果没有,我创建一个新的模型实例并设置一些默认值...然后,我将它传递给EditView。

问题是我的视图显示错误验证消息...对于所有必填字段...

当然,这是因为这些字段是空的并且是必需的...看起来这个视图认为我回发了一个无效的模型......有没有办法隐藏那些验证消息?

1 个答案:

答案 0 :(得分:0)

如果您打算在POST操作中修改模型上的某些值,请尝试清除模型状态:

[Authorize]
public ActionResult Index(Candidat model)
{
    if (model.LoginEmail == null)
    {
        model = null;
        using (var db = new rhDB())
        {
            MembershipUser user = Membership.GetUser();
            if (user != null)
            {
                ModelState.Clear();
                model = (from m in db.Candidates where m.LoginEmail == user.Email select m).SingleOrDefault();
            }

            if (model == null)
            {
                ModelState.Clear();
                model = new Candidat();
                model.LoginEmail = user.Email;
                model.Email = user.Email;
            }

        }
    }

    return View("MyProfileCandidate", model);
}

原因是HTML帮助程序将使用最初发布的模型状态值而不是模型中的模型状态值。您还可以清除模型状态中的各个字段:ModelState.Remove("FirstName");