ここスタックオーバーフローや他の場所には他にも多くの質問がありますが、私はそれらの答えをふるいにかけるのに非常に多くの時間を費やしたため、最終的に自分で質問することはありません. ここにある解決策の多くを試しましたが、どれもうまくいきません。
私の問題は、タイトルに記載されているとおりです。ページの読み込み時にラジオ ボタンが設定されておらず、その理由がわかりません。
以下のコードでは、モデルにブール値 CanSubmit があり、canSubmitYes および canSubmitNo ID は、次を使用して生成された ID です。
ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId("canSubmitYes")
と
ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId("canSubmitNo")
現在、ラジオ ボタンと対応するラベルは次のように設定されています。
@Html.LabelFor(Function(m) m.CanSubmit, "Yes", New With {.for = canSubmitYes})
@Html.RadioButtonFor(Function(m) m.CanSubmit, True, New With {.id = canSubmitYes, .class = "submit-toggle-yes"})
@Html.LabelFor(Function(m) m.CanSubmit, "No", New With {.for = canSubmitNo})
@Html.RadioButtonFor(Function(m) m.CanSubmit, False, New With {.id = canSubmitNo, .class = "submit-toggle-no"})
私が試したこと:
checked="checked"
ヘルパー HTMLAttributes コレクションのプロパティの設定- HTMLHelper コードをすべて取り除き、基本的な
<input type="radio" />
コントロールを使用するだけで、何らかの理由でロード時にまだ適切にチェックされていません。 - jQuery イベントを使用して、ドキュメントの読み込み時にそれらの 'checked' プロパティを設定しようとしましたが、これも機能しませんでした。(経由
.prop("checked", true)
) - プロパティが文字列ではなくブール値であることを強制的に理解させるために、html ヘルパーの形式を から に変更
"false"
しました。false
これらのコントロールに値を設定する他の JavaScript イベントはありません。ボタンをクリックしても、オブジェクトで変更された HTML 値はありません。これにより、「クリックされた」/「チェックされた」プロパティは、ブラウザーが保持する疑似プロパティまたは状態であると考えるようになります。
何か重要なことを見逃したのでしょうか、それともここから離れていますか?
前もって感謝します!
アップデート
私が使用しているローカル変数と関係があると判断しました。私は今、それらを基本的なものに<input>
戻しました。それらを接続しないと、期待どおりに動作します。name
それらが機能しないのは、それらをコモン (それらを結び付ける方法) とペアにしようとしたときだけです。
<input name="radio@(Model.ID)" id="@canSubmitYes" type="radio" class="submit-toggle-yes" @(If(submitterPermission.IsSelected, "checked='checked'", "")) />
<label for="@canSubmitYes">Yes</label>
<input name="radio@(Model.ID)" id="@canSubmitNo" type="radio" class="submit-toggle-no" @(If(submitterPermission.IsSelected, "", "checked='checked'")) />
<label for="@canSubmitNo">No</label>
属性を削除すると、name=''
ロード時に適切な要素が正しくチェックされます。ページには 50 以上のペアリングが存在する可能性があるため、これらのアイテムは一意である必要があります。