ASP MVC 3隐藏字段回发行为

时间:2011-11-24 12:58:55

标签: asp.net-mvc-3

我有ASP MVC 3应用程序,

在我的模型中,我有IsGoodMode bool属性。

并在我的视图

上使用此属性,例如<%: Html.HiddenFor(m => m.IsGoodMode)%>

当我第一次打开页面时,我的IsGoodMode包含false值。 我在javascript中将IsGoodMode值从false更改为true。 我按下提交按钮和控制器获取IsGoodMode的模型包含真值。

控制器中的

我将IsGoodMode更改为false;

但在浏览页面上,IsGoodMode仍具有真正的价值。

        [HttpPost]
        public ActionResult Index(SettingsModel model)
        {                                
            model.IsGoodMode = false;
            return View(model);
        }

为什么会这样? 发回后MVC3的绑定属性如何?

由于

2 个答案:

答案 0 :(得分:2)

关于ModelState的MSDN文章至少可以说是简短的,但它是由ModelState负责的。

处理@ Html.BeginForm()后,控件将由当前模型的ModelState中的值填充(如果适用)。

您可以通过在操作方法中调用ModelState.Clear()来覆盖此行为。

答案 1 :(得分:1)

我试图在我的本地复制相同的行为。我觉得Html.HiddenFor()帮助方法有些疯狂。我通过使用稍微不同的方法来实现功能。

方法:1

  • 用常规的html隐藏输入元素替换Html.HiddenFor()。我使用了以下标记,它起作用了:

    <input type="hidden" value="<%= Model.IsActive %>" />
    

方法:2

  • 使用Html.HiddenFor()的替代语法。如下所示:
      <%= Html.HiddenFor(x => Model.IsActive) %>

您可以尝试这两种方法中的任何一种,我的猜测是它也应该适合您。