5

xvalを使用して、asp.netmvc2Webアプリケーションでクライアント側の検証を使用しています。数値フィールドにテキストを入力するとエラーが発生しますが、それでもフォームをデータベースに送信しようとします。誤った値は0に置き換えられ、データベースに保存されます。しかし、代わりに、フォームを送信しようとすることさえできないはずです。誰かがここで私を助けることができますか?

以下のように属性を設定しました。

[Property]
[ShowColumnInCrud(true, label = "FromPriceInCents")]
[Required]
//[Range(1, Int32.MaxValue)]
public virtual Int32 FromPriceInCents{ get; set; }

リクエストをキャッチするコントローラーは以下のようになります。この部分でエラーは発生していません。

[AcceptVerbs(HttpVerbs.Post)]
[Transaction]
[ValidateInput(false)]
public override ActionResult Create()
{
  //some foo happens
}

私の見解は以下のようになります:

<div class="label"><label for="Price">FromPrice</label></div>
<div class="field">
<%= Html.TextBox("FromPriceInCents")%>
<%= Html.ValidationMessage("product.FromPriceInCents")%></div>

そして、ビューの最後に、次のルールがあります。これは、htmlコードで正しい検証ルールを生成します。

<%= Html.ClientSideValidation<Product>("Product") %>

誰かがこの問題で私を助けてくれることを願っています、事前に感謝します!

編集:4月19日、input type = "Button"の代わりに使用されている通常のボタンがあることがわかりました。これが問題になる可能性がありますか?

<button class="save" type="submit" name="save"><span>Opslaan</span></button>
4

3 に答える 3

3

多分これは役立つかもしれません:

jQuery検証プラグインをメタデータ、jQueryフォーム、xValと一緒に使用するにはどうすればよいですか?

于 2010-04-22T09:31:25.313 に答える
2

ここでの私の最初の主な関心事は、アプリが最初にデータベースに値を保存するのはなぜですか?xValはアプリケーションをユーザーフレンドリーにするための優れた方法ですが、サーバー側の検証を行う必要があります。サーバー上のデータを検証しないと、大きなセキュリティホールが発生します。値を保存する前に、コントローラーでModelState.IsValidを確認してみてください。

さて、私が見たところ、あなたはxVal検証を使用して登録しています

<%= Html.ClientSideValidation<Product>("Product") %>

それが機能する方法は、「Product」というプレフィックスが付いたすべてのコントロールのクライアント側の検証を可能にすることです。一方、テキストボックスのIDはFromPriceInCentsです。

したがって、ここでの解決策はこれを行うことです。

<%= Html.TextBox("FromPriceInCents")%>
<%= Html.ValidationMessage("FromPriceInCents")%>

<%= Html.ClientSideValidation<Product>() %>

UPD3投稿 を更新しました。プレフィックスが使用されないようにコードを修正しました。

また、実用的なソリューションを含む実用的なソリューションをコンパイルしました。リスト、編集、ページの作成、文字列と整数のプロパティ、およびxVal検証。

public class Product
{
    [ScaffoldColumn(false)]
    public int Id { get; set; }

    [Required]
    [Range(1,50)]
    public int PriceInCents { get; set; }

    [Required]
    [StringLength(50)]
    public string Name { get; set; }
}

とビューで

<%= Html.TextBoxFor(model => model.PriceInCents) %>
<%= Html.ValidationMessageFor(model => model.PriceInCents) %>

ここにダウンロードリンクがあります。それをチェックして、それが機能するかどうか教えて くださいhttp://www.flexlabs.org/download/xValTest

于 2010-04-18T08:03:59.413 に答える
0

Range属性をコメントアウトするのはなぜですか?指定したプロパティを使用すると、テキストボックスに何かが入力されている限り、クライアント側の検証に合格する必要があります。

于 2010-04-16T14:27:50.697 に答える