猿问

C# ASP.NET:复选框和单选按钮的问题

我正在创建一个应用程序,用户填写一个表单,其中某些属性的设置不是强制性的。这包括复选框和单选按钮。


所以,我的模型中有这样的东西:


public class MyModel {

     public bool boolvalue;

     public MyTwoValuedType mytypevalue;

}

我认为:


@model MyModel


<form method="post">

   @Html.CheckBoxFor(m => m.boolvalue)


   @Html.RadioButtonFor(m => m.mytypevalue, mytypevalue.Value1)


   @Html.RadioButtonFor(m => m.mytypevalue, mytypevalue.Value2)

</form>

当我初始化视图时,我return View();在控制器中发送一个空模型,并且单选按钮没有值(未选中单选按钮)并且未选中复选框(因此其值为 false)。但是,我想使用可空类型,例如 (bool?和MyTwoValuedType?),一旦我希望如果在用户没有更改复选框和单选按钮的值的情况下提交表单(在视图中),它们就不会没有得到默认值。即使表单提交有错误,表单的重新出现(因为验证失败)的复选框和单选按钮中的值也不是由用户设置的……


我应该使用Html.DropDownListFor可空类型而不是复选框和单选按钮吗?这样会有好的结果吗?


拉丁的传说
浏览 139回答 3
3回答

米琪卡哇伊

将 @Html.DropDownListFor 用于可为 null 的属性,因为当您在视图中发送空模型然后在 POST 中发送时,您将得到 false 作为布尔返回值。您不能将复选框用于布尔模型。如果你想使用复选框和单选按钮作为布尔值,那么使用 jquery 来设置值。但 DropdownList 最适合布尔模型属性。

慕村225694

nullable因此,关于在复选框中使用布尔值,它是不合适的,因为nullable布尔值可以存储 3 种状态:null、true和false。但是复选框只能有一个true或一个false其控件。这是因为 aHTML Checkbox没有 3 态支持,因为当时不存在这个概念。它与旧的 Windows 窗体复选框共享该属性。所以需要用adropdownlist来处理这三种状态。如果您想使用复选框,那么:停止使用nullable布尔值或者停止尝试使用 acheckbox因为这样null状态将转换为false

LEATH

你说:“我通过 return View() 发送一个空模型” - 检查模型是否为空。控制器:&nbsp;public ActionResult Index()&nbsp;{&nbsp; &nbsp; &nbsp;return View();&nbsp;}&nbsp;[HttpPost]&nbsp;public ActionResult Index(Models.MyModel m)&nbsp;{&nbsp; &nbsp; &nbsp;return View(m);&nbsp;}看法:<form method="post">&nbsp; &nbsp; @{&nbsp; &nbsp; &nbsp; &nbsp; if (Model == null)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Html.CheckBoxFor(m => m.boolvalue)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Html.RadioButtonFor(m => m.mytypevalue,false);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Html.RadioButtonFor(m => m.mytypevalue,false)&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; else&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Html.CheckBoxFor(m => m.boolvalue)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Html.RadioButtonFor(m => m.mytypevalue, Model.mytypevalue.Value1);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Html.RadioButtonFor(m => m.mytypevalue, Model.mytypevalue.Value2)&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }</form>模型:public class MyModel{&nbsp; &nbsp; public bool boolvalue;&nbsp; &nbsp; private MyTwoValuedType _mytypevalue;&nbsp; &nbsp; public MyTwoValuedType mytypevalue&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; get&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (_mytypevalue == null)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _mytypevalue = new MyTwoValuedType();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return _mytypevalue;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; set&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _mytypevalue = value;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}
随时随地看视频慕课网APP

相关分类

Html5
我要回答