0

チェックボックスからコントローラーに値を投稿するという非常に奇妙なケースがありますが、チェックされていてもそうではありません!

私のビューモデルの一部:

public class BeslutIStortViewDTO
{
    public BeslutIStortDTO BeslutIStort { get; set; }
    public BeslutIStortListorDTO SelectListor { get; set; }
}

public class BeslutIStortDTO
{
    public int id { get; set; }
    public bool Ok { get; set; }
    ... other stuff
}

私の見解の一部:

<div id="colOk" class="kolumn_header">
    @Html.LabelFor(model => model.BeslutIStort.Ok)
    @Html.CheckBoxFor(model => model.BeslutIStort.Ok, new { @class = "rensa", tabindex = 5 })
</div>

コントローラーに渡される文字列で、ボックスがチェックされていない場合、すべて問題ないように見えます。

BeslutIStort.Ok=false

しかし!私がそれをチェックすると:

BeslutIStort.Ok=&BeslutIStort.Ok=false

文字列内で 2 回、最初は値がなく、もう一方はfalseであるため、どちらも間違っています。もちろん、私は 1 つだけを期待しますtrue

もう 1 つの興味深い発見は、実際にレンダリングされた html では、チェックボックスが次のようになっていることです。

<input class="rensa" id="BeslutIStort_Ok" name="BeslutIStort.Ok" tabindex="5" type="checkbox" value="true" /><input name="BeslutIStort.Ok" type="hidden" value="false" />

隠しフィールドあり!

サーバーに値を投稿するときは、ajax を使用します。データ パラメーターは次のように定義されます。

data: $("#BisData").serialize(),

誰かがこれに光を当てるのを手伝ってくれて、コントローラーに「真実」を与えるのを手伝ってくれることを願っています:-)

=== 解決済み === 結局のところ、私は次のようなJavaScriptを持っていました:

$(".rensa").val("");

これにより、チェックボックスが機能しなくなりました。私はこれを追加しました:

$(".rensaCheckbox").attr("チェック済み", false);

チェックボックスの場合、これで機能します。

4

1 に答える 1

1

それは奇妙でも
ありません..最初に、値を2回受け取りました。BeslutIStort.Ok=&BeslutIStort.Ok=false これは、Razorエンジンが、これを使用するたびにフォーム内に同じ名前と値のfalseを持つ非表示フィールドを自動的に配置する@Html.CheckboxFor()
ためです。false値が返されます。

2番目...入力(チェックボックス)htmlコントロールに値がないため、null値を受け取っています。値を返す必要がある場合は、次のコードで値を追加するだけです

<div id="colOk" class="kolumn_header">
    @Html.LabelFor(model => model.BeslutIStort.Ok)
    @Html.CheckBoxFor(model => model.BeslutIStort.Ok, new { @class = "rensa", tabindex = 5,value="true" })
</div>
于 2012-05-09T12:34:09.010 に答える