0

私のチェックボックスはデータベースを更新していますが、更新すると「チェック済み」の値はありません。

<input type="checkbox" id="chkPriorityOnly" @if(Model.PriorityOnly){<text>  checked="checked" </text>}/> Priority Only <br />

次に、提案されたように、次を使用しました:

  @Html.CheckBoxFor(model => Model.PriorityOnly, new { id = "chkPriorityOnly" }) Priority Only<br />

そして、これは選択を保存したときの私のhtmlです:

<input id="chkPriorityOnly" name="PriorityOnly" type="checkbox" value="true" /><input name="PriorityOnly" type="hidden" value="false" /> Priority Only<br />

そして、ここに私の保存があります:

    function OnRestrictionsSaveClick() {

            $.ajax({
                type: 'POST',
                url: '@Url.Content("~/Audience/UpdateRestrictions?audienceID=" + Model.AudienceID)'                
                + '&priorityOnly=' + $('#chkPriorityOnly:checked').val() 
                + '&home=' + $('#chkHome:checked').val() 
                + '&work=' + $('#chkWork:checked').val() 
                + '&cell=' + $('#chkCell:checked').val() 
                + '&text=' + $('#chkText:checked').val() 
                + '&other=' + $('#chkOther:checked').val() ,
                success: function (data) {SaveRestrictionsResponse(data); }
            });
}
4

3 に答える 3

1

これがあなたの質問に答えるかどうかはわかりませんが、JavaScript で行っていることは正しくありません。

$("*:checked") セレクターは、チェックされているチェック ボックスを探します。

チェックボックスがチェックされていない場合、 $("#chkHome:checked") は null を返すことを意味します。

.val() を使用すると、入力の値属性が取得されます。$("#chkHome:checked").val() を呼び出すと、チェックされている場合は "true" (入力の値属性) が返され、それ以外の場合は null が返されます。

代わりに $("#chkHome").is(":checked") (チェックされている場合は true、そうでない場合は false を返します) を使用する必要があります。

非表示の入力を使用しないでください:

<input type="checkbox" name="chkPriorityOnly" id="chkPriorityOnly" @(Model.PriorityOnly ? "checked=checked" : "") value="true" />
<label for="chkPriorityOnly">Priority only</label>

また、データバインディングの目的で、name 属性がモデルのプロパティ名と一致する場合 (例: PriorityOnly と chkPriorityOnly) の方がよいでしょう。

于 2012-04-27T19:54:31.483 に答える
1

Html.CheckboxForメソッドを使用しないのはなぜですか?

@Html.CheckBoxFor(model => model.PriorityOnly) Priority Only<br />

控えめに言っても、AJAX の保存方法は不安定です。POST を指定していますが、クエリ文字列を作成していますが、これは奇妙です。

代わりに、次を試してください。

function OnRestrictionsSaveClick() {
    $.post({
        url: '@Url.Action("UpdateRestrictions", "Audience")',
        data: $("input:checkbox").serialize(),
        success: function(data) { SaveRestrictionsResponse(data); }
    });
}

このように、jQuery は POST 要求データを構築するという面倒な作業を行い、チェックされているすべてのチェックボックスの値を自動的に取得します。チェックされていないチェックボックスは送信されないため、UpdateRestrictions() アクションに渡されるビューモデルは、すべてのブール プロパティをデフォルトで "false" に設定する必要があります (モデル バインダーは、チェックされたプロパティを自動的に "true" に設定します)。

また、Url.Actionメソッドを使用して、必要なアクションの URL を生成することもできます。URL をアクションにハードコーディングしないでください。これらの URL を作成するには、常にUrlHelperまたはルーティング対応のいずれかの方法を使用してください。HtmlHelperこれは、ルーティング テーブルが尊重されるためです。そのため、ビューの URL を変更しなくても、ルートを簡単に変更できます。

于 2012-04-27T17:38:41.690 に答える
0

フォームが投稿されると、チェックされているチェックボックスのみが投稿されます。そのため、Html.CheckBoxFor には非表示フィールドがあります。チェックボックスがチェックされていない場合、非表示フィールドの false 値が何も表示されずに投稿されます (非表示フィールドはチェックボックスと同じ名前であることに注意してください)。

そしてこれを試してください:

+ '&priorityOnly=' + $('#chkPriorityOnly').val()

これの代わりに:

+ '&priorityOnly=' + $('#chkPriorityOnly:checked').val()
于 2012-04-27T18:56:30.400 に答える