0

私はmvc3に取り組んでいます。NameIsSelectという 2 つのプロパティを含む 1 つのモデルを作成しました。

ここにあります。

public class DemoModel
{
    public string Name { get; set; }
    public bool? IsSelect { get; set; }
}

このモデルをビューに渡します。

    public ActionResult checkbox()
    {
        DemoModel model = getdemoModel();
        return View(model);
    }
    [HttpPost]
    public ActionResult checkbox(DemoModel model)
    {
        ModelState.Clear();
        return View(model);
    }
    public DemoModel getdemoModel()
    {
        DemoModel demoModel = new DemoModel();
        demoModel.Name = "ABC";
        demoModel.IsSelect = null;
        return demoModel;
    } 

これが私の見解です。

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
    <legend>DemoModel</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.Name)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Name)
        @Html.ValidationMessageFor(model => model.Name)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.IsSelect)
    </div>
    <div class="editor-field">
        @Html.CheckBoxFor(model => model.IsSelect.Value)
        @Html.ValidationMessageFor(model => model.IsSelect)
    </div>

    <p>
        <input type="submit" value="Save" />
    </p>
</fieldset>
}

これを実行すると、エラー、つまり@Html.CheckBoxFor(model => model.IsSelect.Value) オンラインになります。

Null 許容オブジェクトには値が必要です。

しかし、IsSelect 値を設定すると正常falseに動作します。ただし、 IsSelect プロパティの値は返されません。コントローラーに null 値を返します。これは非常に単純な問題だと思いますが、何かが欠けています。では、どのように null 値を処理できます@Html.CheckBoxForか? およびその値をコントローラーに返すにはどうすればよいですか?

4

2 に答える 2

1

まず最初に、null 値が必要ない場合は、? を削除します。宣言から。

次に、 false 値を IsSelect に渡します。

それを次のようにビューにバインドします。

@Html.CheckBoxFor(model=>model.IsSelect)

更新しました:

 public static T GetValue<T>(object o)
        {
            T val = default(T);

            if (o != null && o != DBNull.Value)
            {
                val = (T)o;
            }
            return val;
        }

上記のスニペットは、値が null かどうかをチェックし、そうであればデフォルト値に変換するヘルパー関数です。

データベースからの読み取り中に、次のようなものを使用します:これはキャストに役立ちます:

        `bool IsSelect=GetValue<bool>(value)`

お役に立てれば..

于 2013-11-27T13:43:29.210 に答える