2010-12-17 13 views
1

マイモデルが正しく検証されています。デバッグ中に検証結果にピークを迎えると、すべてが正しいことがわかります。しかし、すべて無効なものが1つしかない場合でも、私の検証結果が表示されます。ここでも、デバッグ中に、唯一つのフィールドを正しく検証結果に表示されますが、私のビューがレンダリングされるときに、すべての私達の表示:Html.ValidationMessageは、有効かどうかにかかわらず、すべてのフィールドをレンダリングします

[HttpPost] 
public ActionResult Create(Widget widget) 
{ 
     if (widge.Valid) 
     { 
     // Save to db 
     } 

     retun View(widget); 
} 

マイビュー:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" Inherits="System.Web.Mvc.ViewPage<Widget>" %> 
// took out a lot of html here 
<form action="Create" method="post"> 
<input name="Widget.City" value="<%= Model.City == null ? "" : Model.City%>" /> 
<%= Html.ValidationMessage("Widget.City")%> 
<input name="Widget.Department" value="<%= Model.Department == null ? "" : Model.Department %>" /> 
<%= Html.ValidationMessage("Widget.Department")%> 
<button type="submit">Save</button> 
</form> 

私たちは市や部門を言ってみましょう私のモデルではNotNullに設定されています。私はCityに正しく入れますが、Departmentは空白のままにしておきます。再び、それはコントローラ上で無効であることを示し、プロパティ部門は問題を抱えていますが、私の見解ではの両方ともプロパティの "nullではないかもしれません"というメッセージが表示されます。私のビューに4つのプロパティと4つのValidationMessageタグがある場合、1つのプロパティが有効でなくても...すべて4が表示されます。どうしたんだ?

答えて

0

私は間違っていない場合、私はあなたがあなたのビューで現在使用しているもの

Html.ValidationMessageFor(model => model.City) 

を使用していないことにしたいと思います。

また、厳密に型指定されたビューを使用しているため、ModelState.IsValidをチェックしてウィジェットを保存する必要があるかどうかを判断する必要があります。つまり、ビューモデルでデータアノテーションを使用している場合です。

+0

)=長い一日となっていることの関節。私はこれがHtml.ValidationMessageForが最後のプロパティをレンダリングするだけなので、Html.ValidationMessage( "City")に変換し、Html.ValidationMessage( "Widget.City")が必要だからだと信じています。 – user500038

+0

私は実際にこれをやらなければならなかったプロジェクトで作業を終え、それは私のために働いた。 ValidationMessageForは、ビューモデルのプロパティがどれほど浅いか深いかは気にしません。たとえば、私が取り組んでいたプロジェクトでは、厳密に型指定されたビューで次のようなものを使用しました:Html.ValidationMessageFor(model => model.MySubObject.MyProperty) – Anthony

+0

ビューモデルに検証注釈を設定していますか? – Anthony

0

[HttpGet]ビューのアクションへの入力として何を使用していますか?

あなたはフォーマットWidget.Propertyビューを使用しているので、モデルはそれがModel.Widget.Property探しているウィジェットのデータを含むウィジェットのプロパティ...すなわちを持っていることを期待しかし、あなたのモデルは、Model.Propertyが含まれています。ここに投稿されたコードに基づいて、ウィジェットをビューに戻すだけで、NULLを持つと解釈されます。Widgetプロパティは、すべてのNotNull検証をトリガーします。

解決策は、ウィジェットのポストモデル([HttpPost]アクションで受け入れるもの)を、ビューに戻しているモデルのウィジェットプロパティに割り当てることです。

public class CreateViewModel 
{ 
    public Widget Widget { get; set; } 
} 


[HttpPost] 
public ActionResult Create(Widget widget) 
{ 
     if (widge.Valid) 
     { 
     // Save to db 
     } 
     var viewModel = new CreateModel() { Widget = widget }; 

     retun View(viewModel); 
} 

うまくいけば、私が正しく..その私は強く型付けされたバージョンを使用している場合は...何も現れない

関連する問題