Радиокнопка отмечена по умолчанию, когда свойство selected имеет значение false? - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь сгенерировать переключатели, проверяя проверенное свойство условно, если значение существует в базе данных, тогда оно должно быть выбрано, иначе проверяемое свойство имеет значение false. поэтому изначально в базе данных нет строк, а свойство selected также имеет значение false для всех переключателей, но, тем не менее, оно выбрано в пользовательском интерфейсе, см. изображение ниже

enter image description here

Так что не знаю, является ли это поведением по умолчанию или осталась какая-либо ошибка, ниже мой код

ViewModel

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; }
}

Посмотреть

@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>

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Проверяя поведение атрибута checked для переключателя , я обнаружил, что ваша проблема возникла, потому что атрибут checked является логическим свойством, которое, когда атрибут присутствует, указывает, что соответствующий элемент ввода находится в проверенном состоянии независимо от того, его значения (checked="false" совпадает с checked="true" или checked="checked").

Если атрибут checked присутствует для нескольких переключателей в одной группе, по умолчанию для последнего переключателя устанавливается значение checked (см. эту скрипку на основе вашего исходного кода). Следовательно, вам нужно исключить атрибут checked, когда для свойства CompanionReleaseRadio1.Checked установлено значение false, с помощью @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 помощника следующим образом:

@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>
}

После этого все переключатели со свойством CompanionReleaseRadio1.Checked, установленным на false, должны были быть установлены в непроверенное состояние (см. эту скрипку для получения ожидаемого результата).

Справка:

Использование @functions на странице ASP.NET с синтаксисом Razor

Смежные вопросы:

Как создать функцию в шаблоне cshtml?

Переключатель проверки asp.net mvc3 на основе модели

0 голосов
/ 16 января 2019

Я создал приложение для Windows и добавил RadioButton на Form1. И установите проверенное свойство как «fasle» для переключателя. Но согласно стандартному поведению Windows-приложения, оно отметило галочкой хотя бы одну радиокнопку.

И как только форма и ее элемент управления будут загружены, тогда только мы можем пометить флажок флажком = ложь.

В приложении Windows есть событие Shown () для формы Windows. Таким образом, у нас есть код, чтобы пометить зарегистрированное событие = false на показанном событии, и он работает как положено.

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

    private void Form1_Shown(object sender, EventArgs e)
    {
        radioButton1.Checked = false;
    }
 }
...