デフォルトでチェック済みとしてRadioButtonFor()を設定する方法
<%=Html.RadioButtonFor(m => m.Gender,"Male")%>
(Html.RadioButton)には抜け道があるが、(Html.RadioButtonFor)には抜け道がない
何か案は?
StackOverflowのこの質問 はRadioButtonListForを扱い、回答もあなたの質問に対応します。 RadioButtonListViewModelで選択したプロパティを設定できます。
簡単な方法を使用します。
<%= Html.RadioButtonFor(m => m.Gender, "Male", new { Checked = "checked" })%>
あまりきれいではありませんが、サイト全体にごく少数のラジオボタンのみを実装する必要がある場合は、次のようなオプションもあります。
<%=Html.RadioButtonFor(m => m.Gender,"Male",Model.Gender=="Male" ? new { @checked = "checked" } : null)%>
ラジオボタンのグループが必要だと思います。何かが
<%=Html.RadioButtonFor(m => m.Gender,"Male")%>
<%=Html.RadioButtonFor(m => m.Gender,"Female")%>
<%=Html.RadioButtonFor(m => m.Gender,"Unknown")%>
コントローラからm.Gender = "Unknown"(または何か)のデフォルト値を指定できます。
このヘルパーは式を評価し、値と等しい場合はラジオボタンをチェックし、RadioButtonForと同じパラメーターを持ちます(このため、名前は異なります)。
public static MvcHtmlString CheckedRadioButtonFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object value)
{
return CheckedRadioButtonFor(htmlHelper, expression, value, null);
}
public static MvcHtmlString CheckedRadioButtonFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object value, object htmlAttributes)
{
var func = expression.Compile();
var attributes = new RouteValueDictionary(htmlAttributes);
if ((object)func(htmlHelper.ViewData.Model) == value) {
attributes["checked"] = "checked";
}
return htmlHelper.RadioButtonFor(expression, value, attributes);
}
使用法:
<%= Html.CheckedRadioButtonFor(m => m.Gender, "Male", new { id = "gender-male" })%>
結果:
<!-- For Model.Gender = "Male" -->
<input checked="checked" id="gender-male" name="Gender" type="radio" value="Male">
<!-- For Model.Gender = "Female" -->
<input id="gender-male" name="Gender" type="radio" value="Male">
別のオプションを見つけたので、テンプレートで@ Html.EditorFor()を使用できます。
この列挙型があるとします:
public enum EmailType { Pdf, Html }
このコードをViews/Shared/EditorTemplates/EmailType.cshtmlに配置できます
@model EmailType
@{
var htmlOptions = Model == EmailType.Html ? new { @checked = "checked" } : null;
var pdfOptions = Model == EmailType.Pdf ? new { @checked = "checked" } : null;
}
@Html.RadioButtonFor(x => x, EmailType.Html, htmlOptions) @EmailType.Html.ToString()
@Html.RadioButtonFor(x => x, EmailType.Pdf, pdfOptions) @EmailType.Pdf.ToString()
いつでも使用したい場合、これを簡単に使用できます:
@Html.EditorFor(x => x.EmailType)
この方法ははるかに普遍的であり、変更しやすいと感じています。
同じIDを持つラジオボタンに関連付けられたラベルを追加することもできます。これにより、ユーザーはラジオボタンまたはラベルをクリックしてそのアイテムを選択できます。ここでは、「男性」、「女性」、「不明」の定数を使用していますが、明らかにこれらはモデルの文字列である可能性があります。
<%: Html.RadioButtonFor(m => m.Gender, "Male",
new Dictionary<string, object> { { "checked", "checked" }, { "id", "Male" } }) %>
<%: Html.Label("Male") %>
<%: Html.RadioButtonFor(m => m.Gender, "Female",
new Dictionary<string, object> { { "id", "Female" } }) %>
<%: Html.Label("Female")%>
<%: Html.RadioButtonFor(m => m.Gender, "Unknown",
new Dictionary<string, object> { { "id", "Unknown" } }) %>
<%: Html.Label("Unknown")%>
<%: Html.RadioButtonFor(m => m.Gender, "Male", new { @checked = true } )%>
または
@checked = checked
もし良かったら
これに出くわし、MVC 5の場合、モデルに値を設定するだけでよいと指摘します。例えば:
モデル:
public class ExampleModel
{
public PackingListInputModel()
{
RadioButtonField = "One";
}
public string RadioButtonField { get; set; }
}
表示:
@model ExampleModel
@using (Html.BeginForm)
{
@Html.RadioButtonFor(m => m.RadioButtonField , "One")
@Html.RadioButtonFor(m => m.RadioButtonField , "Two")
}
値がモデルで設定されたものと一致するため、最初のラジオボタン(「One」)の状態はアクティブとして設定されます。
デフォルトのラジオボタンをtrueに設定するコードは次のとおりです
@Html.RadioButtonFor(m => m.Gender, "Male", new { @checked = "checked", id = "rdGender", name = "rbGender" })
@Html.RadioButton("Insured.GenderType", 1, (Model.Insured.GenderType == 1 ))
@Web.Mvc.Claims.Resources.PartyResource.MaleLabel
@Html.RadioButton("Insured.GenderType", 2, Model.Insured.GenderType == 2)
@Web.Mvc.Claims.Resources.PartyResource.FemaleLabel
モデルのコンストラクターメソッドに既定値を配置するのが最善の方法です。
Gender = "Male";
Jqueryを使用している場合は、ラジオボタンの直前でこれを呼び出すことができます。
$('input:radio:first').attr('checked', true);
^これにより、最初のラジオボックスがチェックされますが、より多くのjqueryを見て、選択したいものに切り替えることができます。