2012-01-04 25 views
4

こんにちは、私はGoogle、ヤフーで見て、なぜ私の'@Html.ValidationMessageForは動作しません 'の答えを見つけることができませんでした。私はアプリケーションを実行すると何も起こらず、すべてが入力されます。下の編集ビューでアイテムを編集しようとするとクラッシュします。私は以下を持っています:@ Html.ValidationMessageFor not working

<div class="editor-label"> 
     @* @Html.LabelFor(model => model.Posted)*@ 
    </div> 
    <div class="editor-field"> 
     @Html.HiddenFor(model => model.Posted, Model.Posted = DateTime.Now) 
     @Html.ValidationMessageFor(model => model.sendinghome) 
    </div> 

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

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

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

もっとコードを表示する必要があります。あなたのモデルはどのように定義されていますか任意のデータ注釈属性?コントローラーはどうですか? –

+0

すべてが罰金を働かせて、何を見たいのですか?それはうまくいきませんか?コントローラーはどのようにそれを実行していますか?コードが実行され、編集時にのみうまく動作します – user1128756

+3

すべてがうまくいけば、この質問のポイントは何ですか?妥当性を確認することなく、あなたの質問に答えることはできません。では、検証ルールはどのように定義されていますか?コントローラがモデルの有効性をどのように処理していますか? –

答えて

28

検証はどのように動作しますか。

あなたは次のモデルがあるとしましょう:

public class MyModel { 
    [Required] 
    public string MyProperty { get; set; } 
} 

Required属性を、それがMyPropertyは必須項目であることを指定するデータ注釈属性です。 、そして、

@model MyNamespace.MyModel 

@using (Html.BeginForm("MyAction", "MyController")) { 
    @Html.LabelFor(m => m.MyProperty) 
    @Html.TextBoxFor(m => m.MyProperty) 
    @Html.ValidationMessageFor(m => m.MyProperty) 

    <input type="submit" value="Click me"> 
} 

このフォームはMyControllerMyAction行動に投稿されますと、あなたのモデルの検証が行われることになる。

MyModelは、以下のビュー(MyView.cshtml)で使用されています。あなたのモデルが有効かどうかチェックしてください。 ModelState.IsValidプロパティを使用して行うことができます。

[HttpPost] 
public ActionResult MyAction(MyModel model) { 
    if (ModelState.IsValid) { 
     // save to db, for instance 
     return RedirectToAction("AnotherAction"); 
    } 
    // model is not valid 
    return View("MyView", model); 
} 

検証が失敗した場合、ビューはModelStateオブジェクトに存在する異なるエラーを使用して再度レンダリングされます。これらのエラーは、ValidationMessageForヘルパーによって使用され、表示されます。

+2

いい説明。 –

1

まさにBertrandが説明しているとおり、jqueryの検証も使用でき、ブラウザ上でサーバーの検証が不要になります。 (asp.net mvcはモデルのルールを自動的に検証します)

+10

クライアント側の検証はこれまで数えることができないため、*サーバー側の検証を排除してはいけません。クライアント側の検証は優れた拡張機能ですが、サーバー側の検証のみを信頼できます。 – TLS