2011-10-19 12 views
2

リモート検証に問題があります。MVC3でリモート検証を使用する場合のヌル値

リモートバリデーターを追加したプロパティを持つビューモデルがありますが、フォームを実行してテキストボックスに文字列を入力すると、コントローラーに渡される値はnullになります。

のviewmodelにプロパティは、このようになります。

[Required(ErrorMessage = "Enter the host's name")] 
[Remote("ValidateHostFullName", "BoardroomBooking", ErrorMessage = "Enter a different name")] 
[DisplayName("Host's Name")] 
public string HostFullName { get; set; } 

コントローラにおけるバリのコードは次のようになります

public ActionResult ValidateHostFullName([Bind(Prefix="BookingReceptionViewModel")]string HostFullName) 
{ 
    if (!HostFullName.Equals("John Smith")) 
    { 
     return Json(true, JsonRequestBehavior.AllowGet); 
    } 

    return Json("{0} is not allowed", JsonRequestBehavior.AllowGet); 
} 

HostFullNameの文字列の値としてヌルなしを示します箱に何が入力されているかが重要です。私はバインドプレフィックスの有無にかかわらず試してみましたが、違いはありません。

私はこれをモデルで試してみましたが、動作します。ビューモデルを使用すると問題が発生しているようです。

マーク

+1

生成されたHTMLの対応する入力フィールドの 'name'は何ですか? FireBugで検査するとき、AJAXリクエストに正確にどの値がPOSTされますか? –

+1

@DarinDimitrovフィールドの名前は、HostFullNameとして生成されます。 FireBugのリクエストは、 "GET/BoardroomBooking/ValidateHostFullName?callback = jQuery15104607706305105239_1319095613374&HostFullName = John + Smith&_ = 1319095674721"と表示されます。 –

+1

コールバックパラメータはどこから来ますか?また、クエリ文字列のパラメータは 'HostFullName'と呼ばれるので、あなたのアクションにBind属性は必要ありません。しかし、私はあなたにもこの要求に他の問題があると思います。 JSONPリクエストのように見えますが、そうではありません。 –

答えて

2

おかげで、私は同じ問題を抱えていました。 ValidateHostFullName()に入るパラメーターは、入力名と同じでなければなりません。

+0

私は回答の投稿に同意します。私はそれを実験した。パラメータの値は入力名と一致する必要がありますが、大文字と小文字は区別されません(入力名はミックスケースですが、パラメータはすべて小文字にすることができます)。それは非常に悪い制限です。 –

0

私は同じ問題を抱えていました。レンダリングされたhtmlコントロールにはクラス名が前置されていませんでしたが、リモート検証コードではclassname.propertynameの接頭辞を使用してバインドしました。このバインディングを削除すると私の問題が解決しました。または、プレフィックスだけでプロパティ名もうまく動作します。

関連する問題