ASP.Net MVCでAJAXフォームをsubmitingの結果に派遣する方法?
-
06-09-2019 - |
質問
ASP.Net MVCで、多かれ少なかれこのような形状を有する
<% using (Ajax.BeginForm(new AjaxOptions() { OnSuccess="onSuccess"})) {%>
<p>
<label for="Comment">Comment:</label>
<%= Html.TextArea("Comment")%>
<%= Html.ValidationMessage("Comment", "*")%>
</p>
<p><input type="submit" value="Submit comment" /></p>
<% } %>
どのようにするonSuccess JavaScript関数は、それは、コメントのリストやログ記録のためにポップアップ表示されるべきページ内のログに追加するdiv要素としてコメントを検証していなかったので、結果は、フォームの別のバージョンであるかどうかを知ることができますで?
正しい解決策はありません
他のヒント
あなたは戻っJSONか、使用どんな輸送方法でそれを定義することができますか?
これはするonSuccess関数が呼び出される方法です::それはあなたが探しているものだが、また、場合わかりません
YourFunction(ajaxContext);
次のようにAjaxContextが定義されている
AjaxContext ajaxContext = new AjaxContext(request, updateElement, loadingElement, ajaxOptions.InsertionMode);
あなたは新しい部分図を使用してAjaxフォーム内のコードを置き換える必要があり、その後、あなたはあなたのコントローラからその部分ビューを返します。部分図がで構成されます:
<p>
<label for="Comment">Comment:</label>
<%= Html.TextArea("Comment")%>
<%= Html.ValidationMessage("Comment", "*")%>
</p>
<p><input type="submit" value="Submit comment" /></p>
この方法では、あなたの部分図は、通常のビューのように動作します。 残念ながら(ビューで応答しているので)、応答としてJavaScriptを実行する簡単な方法はありません。あなたの応答はJSON文字列だった場合、それは容易になるだろうが、JSON文字列は、フォームを送信(およびその応答を処理)の結果として画面上にレンダリングされますので、その場合には、あなたはAjaxFormを使用することはできません。
:これは(私はそれを試していない)にもかかわらず動作して<p>
<label for="Comment">Comment:</label>
<%= Html.TextArea("Comment")%>
<%= Html.ValidationMessage("Comment", "*")%>
</p>
<p><input type="submit" value="Submit comment" /></p>
<script type="text/javascript">
function processResponse(data){
// blah blah blah
}
processResponse(<%= ViewData["dataFromTheController"] %>);
</script>
あなたは、単に(例えば.FORM、.comments、.loginファイルのために)あなたの応答のルート要素に異なるCSSクラスを追加することができます。そして、(jQueryの例の場合):
var response = $(responseContent);
$('.form', response).each(function() {
// $(this) is form
});
$('.comments', response).each(function() {
// $(this) is comments
});
$('.login', response).each(function() {
// $(this) is login page
});
どのようにするonSuccessのJavascript 関数は、結果があるかどうかを知ります そのため、フォームの別のバージョン 、へDIVとしてコメントを検証しませんでした コメントやログのリストに追加 以下のためにポップアップ表示されなければならないページで ログインするには?
短い答えは、それはあなたが明示的に検証することができない場合を除きということです。 JSON文字列として輸送されているためですクライアント側のJavaScriptは、文字列を取得するときます。
まず第一に、あなたは、暗黙のうちに期待するオブジェクトの種類を知っている必要があります。あなたはWebサービスの@ Cars/List
を呼び出しているなら、あなたが知っている返されたオブジェクトは、車のリストになりますと、あなたのクライアントに適切にそれを解析します。あなたが再試行することにより、適切な要求を処理するか、それらをログに記録するか、エラーメッセージを示す必要があり、エラーに実行することができます。
私はこれで、 jquery.formプラグインに使用するためにあなたをお勧めしますあなたはこのように、AJAXの1のように行動するために、通常のフォームを持つことができます:
<script type="text/javascript">
// wait for the DOM to be loaded
$(document).ready(function() {
// bind 'myForm' and provide a simple callback function
$('#myForm').ajaxForm(function() {
alert("Thank you for your comment!");
});
});
</script>
<form id="myForm" action="comment.php" method="post">
Name: <input type="text" name="name" />
Comment: <textarea name="comment"></textarea>
<input type="submit" value="Submit Comment" />
</form>