2

私はVB.NetでASP.NetMVC4を使用していますが、c#でnull許容ブール値のチェックボックスを作成する方法について他のいくつかの回答を見てきました。通常、VB.Netへの変換は非常に簡単です。これはわかりません。

他の答えはこれをするように言います。

EditorTemplatesフォルダーにBoolean.cshtmlを作成し、貼り付けます

@model bool?    
@Html.CheckBox("", Model.GetValueOrDefault())

そこで、VBと同等のものを試しました。EditorTemplatesフォルダーにBoolean.vbhtmlを作成し、これを配置しました。

@model System.Nullable(of Boolean)
@Html.CheckBox("", Model.GetValueOrDefault)

それから私の見解では私は持っています

@Html.EditorFor(Function(x) x.myNullableBool)

そのコードはこの例外をスローします:

オブジェクト変数またはWithブロック変数が設定されていません。

ここに投稿されているものと非常によく似たc#の例で私が見つけたいくつかの異なる場所があります。誰かがこれをVB.Netで動作させる方法を知っていますか?

編集

これは私がやろうとしていることの一種です(うまくいったらもっと良いでしょう)

@model System.Nullable(of Boolean)
@Html.CheckBox("", If(Model is Nothing, False, Model))
4

1 に答える 1

3

AnHTML checkboxには2つの状態があります。

  • チェック済み
  • チェックされていない

boolean.NETタイプの用語に変換すると、これは次のことを意味します。

  • 誤り

したがって、ビューモデルのNullableブールプロパティをチェックボックスにバインドしようとしても、論理的にはほとんど意味がありません。null許容ブール値には、.NETで3つの状態があります。

  • 何もありません(C#ではnull)
  • 誤り

ご覧のとおり、チェックボックスのHTMLセマンティクスは、ビューモデルタイプに適合していません。ちなみに、Html.CheckBoxForヘルパーがnull許容のブール値ではなくブール値のプロパティを期待するのは当然のことです。

したがって、チェックボックスにバインドする場合は、ビューモデルプロパティのタイプをnull許容不可能なブール値に変更することをお勧めします。

~/Views/Shared/EditorTemplates/Boolean.vbhtmlそれ以外の場合は、次のコンテンツを含むカスタムエディタテンプレートを常に作成できます。

@ModelType Nullable(Of Boolean)
@Html.CheckBox("", If(Model.HasValue, Model.Value, False))

ただし、ビューモデルを正しく設計する場合、つまりビューの要件に一致させる場合は、この種のハックは必要ありません。

于 2012-12-20T21:58:36.553 に答える