Радиокнопка всегда отмечена, пункт показывает Ложь - PullRequest
0 голосов
/ 23 января 2019

У меня есть кнопки Razor Radio, но всегда отмеченный пункт показывает false.

код

    @using (Html.BeginForm("NewsSubmit", "Home", FormMethod.Post))
            {
                <div class="card-body pt-5 flex-center flex-column">
                    <form class="form-checkout form-style-1">
                        <div class="form-group text-center mt-3 shipping-group">

                                @Html.RadioButtonFor(x=>x.IsUseRegisteredAddress,true,new { @class = "custom-control-input", @checked = " " })

                                @Html.RadioButtonFor(x => x.IsUseRegisteredAddress, false, new { @class = "custom-control-input",@checked = " " })

                        </div>
                   </form>
                 </div>
           }

Контроллер

Public ActionResult NewsSubmit(NewsTotal news)
{
return View();
}

DTO

public class NewsTotal()
{
public bool IsUseRegisteredAddress{get;set;}
}

Ответы [ 2 ]

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

Проблема возникает из-за объявления вашего свойства viewmodel, которое определено как bool, также вы не устанавливаете его из контроллера при получении NewsTotal с помощью return View(news):

public bool IsUseRegisteredAddress { get; set; }

Поскольку значение по умолчанию bool равно false, когда оно не установлено, тогда переключатель, который имеет значение false, установлен по умолчанию. Если вы хотите использовать true по умолчанию, вам нужно установить его из действия контроллера, которое возвращает представление с viewmodel:

[HttpPost]
public ActionResult NewsSubmit(NewsTotal news)
{    
    // set radio button state (optional, ignore this if it's already set in 'news' parameter)
    news.IsUseRegisteredAddress = true;

    // returning viewmodel is mandatory
    return View(news);
}

Или, если вы хотите отключить все переключатели по умолчанию, укажите вместо этого Nullable<bool> свойство viewmodel:

public bool? IsUseRegisteredAddress { get; set; }

Примечания:

1) Возможно, вы захотите удалить свойство @checked из RadioButtonFor, поскольку checked является логическим свойством, которое представляет проверенное состояние, когда атрибут присутствует (и не отмечен, когда атрибут отсутствует), как указано ниже:

@Html.RadioButtonFor(x => x.IsUseRegisteredAddress, true, new { @class = "custom-control-input" }) Yes

@Html.RadioButtonFor(x => x.IsUseRegisteredAddress, false, new { @class = "custom-control-input" }) No

Если атрибут checked присутствует в двух переключателях с одинаковым именем или группой, последний переключатель с атрибутом checked будет установлен как отмеченный по умолчанию.

2) Вторая форма <form class="form-checkout form-style-1"> недопустима, поскольку она создает вложенные формы. Удалите дополнительный тег формы внутри Html.BeginForm помощника и вместо него задайте стиль основной формы:

@using (Html.BeginForm("NewsSubmit", "Home", FormMethod.Post, new { @class = "form-checkout form-style-1" }))
{
    // form contents
}
0 голосов
/ 23 января 2019

правильный способ проверить ваши переключатели таков:

@Html.RadioButtonFor(x=> x.IsUseRegisteredAddress, "Registered", new { @checked = true })

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...