Проблема возникает из-за объявления вашего свойства 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
}