ASP.NET MVC 3 Ajax.BeginForm и Html.TextBoxFor не отражает изменения, сделанные на сервере - PullRequest
5 голосов
/ 22 ноября 2011

Я использую помощник Ajax.BeginForm в ASP.NET MVC3 для отправки формы, которая заменяет себя новыми значениями в форме, установленной на сервере.Однако, когда я использую помощники, такие как Html.TextBox, я получаю отправленные значения, а не значения, которые я вставил в модель на сервере.

Например;Я установил для SomeValue значение 4 и отобразил его в текстовом поле.Я изменяю значение на 8, нажимаю «отправить» и ожидаю, что значение изменится на 4 в текстовом поле, но по какой-то причине оно останется 8. Но если я вывожу SomeValue без использования помощников Html, он говорит 4. Кто-нибудь знает, чточто происходит?

Мой контроллер:

public ActionResult Index(HomeModel model)
{
    model.SomeValue = 4;
    if (Request.IsAjaxRequest())
        return PartialView(model);
    return View(model);
}
public class HomeModel
{
    public int? SomeValue { get; set; }
}

My View (пожалуйста, не надо, чтобы у меня был весь необходимый javascript на моей странице макета):

<div id="ajaxtest">
@using(Ajax.BeginForm(new AjaxOptions{ InsertionMode = InsertionMode.Replace,
    UpdateTargetId = "ajaxtest", HttpMethod = "Post" })) {
    @Html.TextBoxFor(model => model.SomeValue)
    <input type="submit" value="Update" />
}
</div>

Ответы [ 2 ]

6 голосов
/ 22 ноября 2011

вы можете использовать

ModelState.Clear() 

в вашем методе контроллера, чтобы помощники html использовали вашу измененную модель. В противном случае они используют значения из формы отправки

Посмотрите на: Asp.net MVC ModelState.Clear

1 голос
/ 22 ноября 2011

в вашем методе POST вам нужно сделать

ModelState.Clear();

для отражения изменений, внесенных после публикации

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