mvc3 - 从视图返回bool到控制器

时间:2012-10-28 23:30:27

标签: c# asp.net-mvc-3 html-helper

背景

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

尝试

我知道MVC是无国籍的。

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

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

问题

无论如何,我都希望坚持布尔的状态。我不知道该怎么做,我不确定此时最好做的事情是

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

2 个答案:

答案 0 :(得分:1)

值从视图到控制器的方式是ModelBinding。如果你不熟悉它是如何工作的,你可能希望Google能够更好地理解它。

作为一个简单的例子,让我们说你想要传递bool的控制器中的action方法如下所示:

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

如果使用内置帮助器方法,则无需担心在field元素中获取正确的名称/值 - MVC将为您执行此操作

e.g。 @Html.HiddenFor(model => model.MyBool)将呈现类似

的HTML
<input type="hidden" id="MyBool" name="MyBool" value="True" />

答案 1 :(得分:0)

使用bool?在你的模型中。如果没有它,bool将始终默认为false。