MVC3 Редактирование в индексном представлении - PullRequest
0 голосов
/ 29 января 2012

Мне нужна помощь с этим ....

У меня есть эта простая модель:

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 голосов
/ 29 января 2012

Попробуйте очистить состояние модели, если вы намерены изменить некоторые значения вашей модели в действии 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");.

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