0

背景

我在视图模型类中有一个布尔值。我有一个 if 语句检查布尔值是真还是假。如果为假,我将值设置为真并调用视图。在视图中,我有按钮,当点击更新并再次调用视图时。我的问题是加载视图时 bool 一直设置为 false。我不知道为什么会这样。有没有办法阻止布尔值被改变?

尝试

我知道 MVC 是无状态的。

我使用的视图是一个 .aspx 视图,其中输入标记的“值”属性已被使用。所以我无法更新提交按钮的值。

<input type="submit" class="button" value="bvCalc" />

问题

无论以何种方式,我都希望保持 bool 的状态。我不知道该怎么做,我不确定此时最好的做法是否是

  1. 在视图中使用隐藏字段
  2. 构建一个 HTML Helper Extension,它将 bool 从 true 更新为 false
  3. 返回修改后的值,并将模型信息发送回控制器,以便我可以评估 if 语句中的数据。
4

2 回答 2

1

值从视图到控制器的方式是通过ModelBinding. 如果你不熟悉它是如何工作的,你可能想谷歌它以获得更好的理解。

举个简单的例子,假设您想要将 bool 传递给的控制器中的操作方法如下所示:

public ActionResult MyAction(MyViewModel model)
{
  //.. do something here.
}

你的 ViewModel 看起来像这样:

public class MyViewModel
{  
   public bool MyBool { get; set; }
   // ...more properties...
}

只要您的视图有某种字段(例如文本框、复选框、隐藏字段),其名称与属性名称(在本例中为“MyBool”)完全匹配,并且值将转换为属性(在本例中)字符串 'True' 可以映射到布尔true值) -ModelBinding将能够在您的控制器操作中model.MyBool填充。true

如果您使用内置的辅助方法,则无需担心在字段元素中获取正确的名称/值 - MVC 将为您完成此操作

例如@Html.HiddenFor(model => model.MyBool) ,将呈现 HTML 之类的东西

<input type="hidden" id="MyBool" name="MyBool" value="True" />
于 2012-10-29T00:37:20.677 回答
0

使用布尔?在你的模型中。没有它,布尔值将始终默认为假。

于 2012-10-28T23:36:11.873 回答