2016-04-18 8 views
2

次のような状況を想像してみてください。ユーザーに引き出しをさせたいと思います。成功した場合は、IndexというHomeControllerというアクションにリダイレクトする必要があります。そうでない場合(たとえば、アカウントの残高が引き出し合計額よりも少ない場合)、検証ベースのエラーを表示します。mvc、ajax、ページにリダイレクト

プロジェクトフェーズでは(私はRequiredのような静的ルールではないので、残高は常に変化します)、妥当性検証ルールを指定することはできません。それは大丈夫ですが、今私は、この場合、これが悲しい後にページをポストバックしないことが可能かどうか疑問に思い始めました。

したがって、私は@using(Ajax.BeginForm(...){}を試してみましたが、コントローラのユーザーはユーザーの入力を確認できました。これが間違っている場合は、モデルにエラーを追加して(一般または特定のプロパティに)、このエラーを含む部分ビューを返し、ページのポストバックを引き起こさないようにすることができます。これは標準的なjQueryの検証と同じ動作をしますが、実際にはポストバックを止めず、更新された部分的なビューしか表示しません。

入力が正しい場合、RedirectToAction("Index", "Home")を使用してIndex.cshtmlをパーシャルビューとして生成することができます(この場合、レイアウトのヘッダーとフッターが倍になります)。これはstil AJAXリクエストであるため理解できます。

私の質問は - まず第一に、私の考慮​​すべき点は何ですか?つまり、このケースではポスティングバックがユーザーフレンドリーになるとは思っていませんでした。もしそうなら、私はこの場合に使用できる他の方法がありますか?データベースなどの特定のコンテキストからデータを取得する必要がある場合は、クライアント側でポストバックを停止できません。

+0

あなたのしたいことは少し不明です。最終的にリダイレクトしたい場合は、通常の送信を行います。コントローラでは条件付きチェックを行い、有効でない場合は 'ModelStateError'を追加してエラーを表示するようにビューを返します(ただし、独自の条件付き検証属性を作成してクライアントサイドの検証を行うこともできます) ') –

+0

投稿後にクライアントスクリプト(javascript)でリダイレクトすることは可能ですか? – smoksnes

答えて

0

実際にサーバーとやり取りすることなく、クライアント側で検証を実行するには、Jquery Validateプラグインを使用できます。きちんとした解決策のカップルは、以下のリンクにあります。

How can I validate that the max field is greater than the min field?

以下は、上記のリンク先の記事で最初jsfiddleの適応です。

$.validator.addMethod("greaterThan", 
    function(value, max, min){ 
     return parseInt(value) > parseInt($(min).val()); 
    }, "Max must be greater than min" 
); 

$('#sales').validate({ 
    rules: { 
    maxWithdrawal: {greaterThan: '#balance'} 
    } 
}); 
関連する問題