1

データファーストの設定があるため、モデルはデータベースからエンティティフレームワークによって生成され、デフォルトの[必須]アノテーションはありません。3つのフィールドを持つ単純なテーブルがあります。1つのIDと2つのVARCHAR/テキストベースのフィールド。

何を試しても、CRUDフォームで検証を停止することはできません。Web.configで無効にし、コントローラーのCreate()メソッドに[ValidateInput(false)]を追加しましたが、効果がありません。@ Html.ValidationSummaryをfalseに設定し、

これが基本的な見方です。

@using (Html.BeginForm()) {
@Html.ValidationSummary(false)

<fieldset>
    <legend>CallType</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.CALLTYPE)
    </div>
    <div class="editor-field">
        @Html.TextBox("calltype", "", new { style = "width: 50px;" })
        @Html.ValidationMessageFor(model => model.CALLTYPE) 
    </div>

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

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

モデル(フレームワークによって生成):

public partial class CALLTYPES2
{
    public int ID { get; set; }
    public string CALLTYPE { get; set; }
    public string DESCRIPTION { get; set; }
}

各フィールドに1文字だけ挿入しても、「値'x'は無効です」と表示されます(検証メッセージをオンのままにして、何が起こっているかを確認します)。

私はどうしたらいいですか?そして、後でこれらのフィールドをどのように検証しますか?モデルで生成されたコードに[必須]を追加できますか?データベースからモデルを再生成するとどうなりますか?

これは、コントローラーのモデルの状態と関係がありますか?

[HttpPost]
    public ActionResult Create(CALLTYPES2 calltype)
    {
        if (ModelState.IsValid)
        {
            db.CALLTYPES2.Add(calltype);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(calltype);
}

私が何を見逃しているのかわからず、私が読んだチュートリアルはあまり光を当てていません。あなたの応答と私の無知のための謝罪に感謝します。

アップデート

エラーが見つかりました-メソッドCreate()のオブジェクト名「calltype」は、フォームフィールド「calltype」の名前/IDと同じです。バインダーは文字列「calltype」をオブジェクト「calltype」にバインドしようとしていると思います。名前を次のように変更しました。

public ActionResult Create(CALLTYPES2 ctype)

これで、編集ウィンドウと作成ウィンドウの両方で機能します。「ctype」は「calltype」と衝突していません。

4

1 に答える 1

0

IDフォームにフィールドを含めるのを忘れました。隠しフィールドとして含めることができます:

@Html.HiddenFor(model => model.ID)

これで、フォームが送信されたときに ID プロパティの値がサーバーに送信され、デフォルトのモデル バインダーは文句を言わなくなります。

于 2012-12-08T16:50:56.437 に答える