一尘不染

ASP.NET MVC 3 Ajax.BeginForm和Html.TextBoxFor不反映服务器上所做的更改

ajax

我正在使用ASP.NET
MVC3中的Ajax.BeginForm帮助程序来提交一个表单,该表单将自己替换为服务器上设置的表单中的新值。但是,当我使用诸如Html.TextBoxFor之类的助手时,我得到的是提交的值,而不是我插入服务器模型中的值。

例如;
我在操作中将SomeValue设置为4,并在文本框中显示它。我将值更改为8,然后单击“提交”,并希望在文本框中将其更改回4,但是由于某种原因,它仍保持为8。但是,如果我不使用Html帮助程序而输出SomeValue,则会显示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; }
}

我的视图(请不要在布局页面中包含所有需要的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>

阅读 262

收藏
2020-07-26

共1个答案

一尘不染

您可以使用

ModelState.Clear()

在您的控制器方法中,以使html助手使用您更改的模型。否则,他们使用表单提交中的值

看看:Asp.net MVC
ModelState.Clear

2020-07-26