RenderPartial через Ajax (jquery) и отображает с неверной моделью. (BUG)? - PullRequest
0 голосов
/ 08 июня 2011

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

modelstate.clear ();устраняет проблему, но, безусловно, это не правильно.

Есть идеи?

Сценарий вызова

$("#registerSubmit").live("click", function (e) {
            if ($("#registerForm").valid()) {
                $.ajax({
                    url: 'home/Register',
                    data: $("#registerForm").serialize(),
                    type: 'POST',
                    success: function (data) {
                        alert(data);
                        $("#registerHolder").html(data);
                    }
                });
            }
            e.preventDefault();
        });

Контроллер

[HttpPost]
        public ActionResult Register(Register model)
        {
            var t = new Register();
            t.EmailAddress = "test";
            t.Password = "1";
            t.VerifyPassword = "2";

            return PartialView("p_register2", t);
        } 

1 Ответ

2 голосов
/ 08 июня 2011

Если вы хотите изменить значения POSTed, вам нужно удалить их из состояния модели, иначе HTML-помощники всегда будут использовать значения POSTed, а не значения в вашей модели. Вот как работают HTML-помощники, и это поведение разработано. Например, помощник Html.TextBoxFor(x => x.EmailAddress) видит, что существует значение POSTed EmailAddress, и он будет использовать это значение вместо того, которое вы передаете в модели.

Итак, вы должны либо удалить значения, которые вы хотите изменить, из состояния модели, либо написать свои собственные помощники HTML:

[HttpPost]
public ActionResult Register(Register model)
{
    var t = new Register();
    t.EmailAddress = "test";
    t.Password = "1";
    t.VerifyPassword = "2";
    ModelState.Remove("EmailAddress");
    ModelState.Remove("Password");
    ModelState.Remove("VerifyPassword ");
    return PartialView("p_register2", t);
} 

и, глядя на это действие, можно задать себе вопрос: какова цель модели Регистра, которую вы используете в качестве аргумента действия? Итак:

[HttpPost]
public ActionResult Register()
{
    var t = new Register();
    t.EmailAddress = "test";
    t.Password = "1";
    t.VerifyPassword = "2";
    return PartialView("p_register2", t);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...