C# 当checked属性为false时,默认选中单选按钮?

C# 当checked属性为false时,默认选中单选按钮?,c#,asp.net,asp.net-mvc,asp.net-mvc-4,razor,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Razor,我试图生成单选按钮,有条件地检查checked属性。如果该值存在于数据库中,则应选择该值,否则checked属性为false。因此,最初数据库中没有行,所有单选按钮的checked属性也为false,但它仍然在UI上被选中,请参见下图 所以我不知道这是默认行为还是留下的bug,下面是我的代码 视图模型 public class CompanionProductVersion1ViewModel { [Required(ErrorMessage = "Please select comp

我试图生成单选按钮,有条件地检查checked属性。如果该值存在于数据库中,则应选择该值,否则checked属性为false。因此,最初数据库中没有行,所有单选按钮的checked属性也为false,但它仍然在UI上被选中,请参见下图

所以我不知道这是默认行为还是留下的bug,下面是我的代码

视图模型

public class CompanionProductVersion1ViewModel
{
    [Required(ErrorMessage = "Please select companion release - 1")]
    public string CompanionReleaseRadio1 { get; set; }
    public List<CompanionReleaseRadio1> CompanionReleaseRadios1 { get; set; }
}

public class CompanionReleaseRadio1
{
    public string RadioID { get; set; }
    public string RadioText { get; set; }
    public bool Checked { get; set; }
}
公共类公司ProductVersion1ViewModel
{
[必需(ErrorMessage=“请选择配套版本-1”)]
公共字符串CompanionReleaseRadio1{get;set;}
public List CompanyReleaseRadios1{get;set;}
}
公共类公司发布Radio1
{
公共字符串ID{get;set;}
公共字符串无线文本{get;set;}
公共布尔检查{get;set;}
}
查看

@model PlatformLifecyclePortal.Web.ViewModel.CompanionProductVersion1ViewModel

<div class="mt-5">
    <div class="d-flex pb-3">
        <h2>Companion Release - 1</h2>
    </div>

    <div class="border border-dark p-5">
        <div class="row"><h6><b>@Session["Release"]</b></h6></div>
        <div class="row"><p><b>@Session["Feature"]</b></p></div>
        <div class="row">@Html.ValidationMessageFor(m => m.CompanionReleaseRadio1, "", new { @class = "help-block text-danger", @style = "color:red;" })</div>
        <div class="row"><div class="col-sm-9">&nbsp;</div></div>

        <div class="row">

            @using (Html.BeginForm())
            {
                <div class="form-group row">
                    @foreach (var companionReleases1 in Model.CompanionReleaseRadios1)
                    {
                        <div class="col-sm-4">
                            @Html.RadioButtonFor(model => Model.CompanionReleaseRadio1, companionReleases1.RadioID, new { id = "CompanionReleaseRadio2" + companionReleases1.RadioID, @checked = companionReleases1.Checked }) <span class="checkbox-label">@companionReleases1.RadioText</span>
                        </div>
                    }
                </div>

                <div class="row">
                    <div class="col-sm-9">
                        <button type="submit" class="btn btn-primary btn-next">Next</button>
                    </div>
                </div>
            }
        </div>
    </div>
</div>
@model PlatformLifecyclePortal.Web.ViewModel.CompanyProductVersion1ViewModel
伴随释放-1
@会议[“发布”]
@会话[“功能”]

@Html.ValidationMessageFor(m=>m.companyReleaseRadio1,”,新的{@class=“help block text danger”,@style=“color:red;”) @使用(Html.BeginForm()) { @foreach(模型中的var CompanyRelease1公司Release1) { @Html.radioButton(model=>model.CompanionReleaseRadio1,companionReleases1.radiod,新的{id=“CompanionReleaseRadio2”+companionReleases1.radiod,@checked=companionReleases1.checked})@companionReleases1.RadioText } 下一个 }
我创建了一个windows应用程序,并在Form1上添加了一个单选按钮。 并将选中的属性设置为单选按钮的“fasle”。但根据windows应用程序的默认行为,它至少标记了一个单选按钮

一旦表单和它的控件被加载,那么只有我们可以为单选按钮标记checked=false

在windows应用程序中,windows窗体显示了一个事件()。因此,我们有代码在显示的事件上标记checked=false,并且它按预期工作

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Shown(object sender, EventArgs e)
    {
        radioButton1.Checked = false;
    }
 }
通过检查,我发现出现问题的原因是
checked
属性是一个布尔属性,当属性存在时,表示相应的输入元素处于选中状态,而不管其值是多少(
checked=“false”
checked=“true”
checked=“checked”

如果为同一组中的多个单选按钮显示了
选中的
属性,则默认情况下,它会将最后一个单选按钮设置为
选中的
(请参见基于原始代码)。因此,当
CompanionReleaseRadio1.checked
属性设置为false时,需要排除
checked
属性,方法是使用
@functions
内联函数帮助器,如下例所示:

@functions {
    private object SetRadioButtonChecked(bool isChecked, string RadioID) 
    {
        // checked state from property
        if (isChecked)
        {
            // checked attribute is present
            return new { id = "CompanionReleaseRadio2" + RadioID, @checked = "checked" };
        }
        else
        {
            // checked attribute is not present
            return new { id = "CompanionReleaseRadio2" + RadioID };
        }
    }
}
然后在
RadioButton
helper中调用上面的内联函数,如下所示:

@foreach (var companionReleases1 in Model.CompanionReleaseRadios1)
{
    <div class="col-sm-4">
        @Html.RadioButtonFor(model => Model.CompanionReleaseRadio1, companionReleases1.RadioID, 
             @SetRadioButtonChecked(companionReleases1.Checked, companionReleases1.RadioID)) 
        <span class="checkbox-label">@companionReleases1.RadioText</span>
    </div>
}
@foreach(Model.companionrelease1中的var companionrelease1)
{
@Html.radioButton(model=>model.companyReleaseRadio1,companyReleaseS1.radiod,
@设置RadioButtonched(公司版本1.Checked,公司版本1.RadioID))
@公司发布1.无线文本
}
之后,所有
CompanionReleaseRadio1.Checked
属性设置为
false
的单选按钮都应设置为未选中状态(有关预期结果,请参阅)

参考资料:

相关问题:


而不是
。其中(…).Count()>1?true:false
最好使用
。如果有任何(…)
返回
true
,我们如何在ASP.NET MVC中执行?OP指的是一个web应用程序。