C#MVC2クライアントサイドフォームxvalでの検証、postを防ぐ
-
27-09-2019 - |
質問
私は使用しています xval ASP.NET MVC2 Webアプリケーションでクライアントサイド検証を使用します。数値フィールドにテキストを入力するときに与えているエラーにもかかわらず、フォームをデータベースに投稿しようとします。誤った値が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日、入力型= "ボタン"の代わりに使用される通常のボタンがあることがわかりました。これが問題になる可能性がありますか?
<button class="save" type="submit" name="save"><span>Opslaan</span></button>
解決
多分これは役立つかもしれません:
他のヒント
ここでの私の主な懸念は次のとおりです。なぜあなたのアプリがそもそもデータベースの値を保存するのですか? Xvalはアプリケーションをユーザーフレンドリーにする良い方法ですが、サーバーサイドの検証を行う必要があります。サーバー上のデータを検証しない場合は、Masiveセキュリティホールがあります!値を保存する前に、コントローラーにModelState.isvalidを確認してみてください。
さて、私が見ているものから、あなたはXVAL検証を使用して登録しています
<%= Html.ClientSideValidation<Product>("Product") %>
それが機能する方法は、「製品」が付いたすべてのコントロールのクライアントサイド検証を可能にすることです。一方、あなたのテキストボックスにはIDがあります frompriceincents
したがって、ここでの解決策はこれを行うことです。
<%= Html.TextBox("FromPriceInCents")%>
<%= Html.ValidationMessage("FromPriceInCents")%>
<%= Html.ClientSideValidation<Product>() %>
Upd3投稿を更新しました。プレフィックスが使用されないようにコードを修正しました。
また、作業ソリューションを含む作業ソリューションをコンパイルしました。リスト、編集、作成ページ、文字列およびintプロパティ、および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
レンジ属性がコメントアウトされているのはなぜですか?テキストボックスに何かが入力されている限り指定したプロパティを使用すると、クライアント側の検証を渡す必要があります。