asp.net MVC3 частичный вид результата не обновляет значение EditorFor - PullRequest
2 голосов
/ 15 июня 2011

У меня есть простая форма захвата электронной почты как часть моей домашней страницы, однако, когда я возвращаю частичное представление, значение модели для редактора для формы не обновляется:

Модель

public class Contact 
    {
        [Key]
        public int Id { get; set; }
        [Required]
        public string Email { get; set; }
        [NotMapped]
        public string Message { get; set; }
    }

Представления

@model TestApp.Models.Contact

@{
    ViewBag.Title = "Home Page";
}

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.form.js")" type="text/javascript"></script>

<script type="text/javascript" >
    $(function () {
        // ajax form post 
        $("#EmailForm").ajaxForm(function (result) {
            $("#EmailForm").html(result); // post results 
        });
    });
</script>
    @using (@Html.BeginForm("SaveEmail", "Home", FormMethod.Post, new { id = "EmailForm" }))
    { 
        @Html.Partial("SaveEmail", Model);
    }

Частичное

@model TestApp.Models.Contact

<span class="editor-label">
    @Html.LabelFor(m => m.Email) :
</span>
<span class="editor-field">
    @Html.EditorFor(m => m.Email)
</span>
<input type="submit" value="Submit" />
<div id="message"> 
    @Html.ValidationMessageFor(m => m.Email) 
    @Html.DisplayFor(m => m.Message) 
</div>  

<br/>

Контроллер

  [HttpPost]
        public PartialViewResult SaveEmail(Contact contact)
        {
            if (ModelState.IsValid)
            {
                //TODO: save e-mail to database

                contact.Message = "You e-mail has been added to our database - Thank y   ou";
                contact.Email = "";
                    return PartialView(contact);

            }

            return PartialView();
        }

Возвращает ошибки модели, как ожидалось, возвращает сообщение, когда состояние моделидопустимо, но значение текстового поля электронной почты в ответе не обновляется

Firebug формы ответа при отправке электронной почты a@b.com

<span class="editor-label">
    <label for="Email">Email</label> :
</span>
<span class="editor-field">
    <input class="text-box single-line" id="Email" name="Email" type="text" value="a@b.com" />
</span>
<input type="submit" value="Submit" />
<div id="message"> 

    You e-mail has been added to our database - Thank you 
</div>  

<br/>

Я пытался создатьНовая модель и, пройдя ее, я попробовал ModelState.Clear (), я могу исправить проблему с помощью небольшого jquery

 $("#Email").val(''); // clear the email address 

Но это кажется немного странным, и я хотел бы понять, что происходитна.

1 Ответ

9 голосов
/ 16 июня 2011

Добавление ModelState.Clear () после того, как вы установили в поле «Электронная почта» пустую строку, и непосредственно перед возвратом PartialView добьется цели.Вы также можете попробовать ModelState.Remove («Электронная почта»).

См. в этом блоге для получения дополнительной информации о том, почему встроенные помощники ведут себя так.

...