2012-06-22 19 views
6

FINAL EDIT:MVC3 Ajax.BeginForm ONSUCCESSはFirefoxで実行されません

ダーリンディミトロフからの回答、以下、私はこの問題は、コントローラのメソッドUpdateForm()へのAJAX呼び出しがあったことになってしまったことを発見した後に空の文字列を返します。これは、私が以前は別の問題を経験した後、必要と判断した修正でした。空の文字列を渡すと、Firefoxのパーサーが鳴り響いていました(明らかにChromeとIEは気にしませんでした)ので、空の文字列を空のdivに置き換えました。

編集:以下ダーリンディミトロフの提案に

おかげで、私は問題を抱えた理由は、問題のフォームが送信されるたびにスローされるエラーが原因であることを見出しました。

JQuery Error

エラーは「ノードが階層構造内の指定された位置に挿入することができません」を読み出します。これは、フォームが送信されるたびにスローされます。私はそれがXMLHttpRequestだと思うようにPOSTデータに気づいた。それが原因ですか(問題のAJAXリクエストはHTMLを返すだけです)?ここでFirebugのからのPOSTデータです:

POST Data 1

POST Data 2

POST Data 3

このエラーは、 "XML解析エラー - 見つかりません要素" 読みます。

FYIからHTMLが返される、常に空の文字列です...


私はIIS7上で実行されているMVC3アプリケーションを持っています。

<form action="/RootName/ControllerName/UpdateForm" data-ajax="true" data-ajax-mode="after" data-ajax-success="ClearTextBox" data-ajax-update="#TargetDiv" id="form0" method="post"> 
    <textarea cols="20" id="txtInput" name="txtInput" rows="5" wrap="virtual"></textarea>  
    <input id="send" class="button" type="submit" value="Send"><br> 
</form> 

私は基本的にだ何:

@using (Ajax.BeginForm("UpdateForm", new AjaxOptions { UpdateTargetId = "TargetDiv", InsertionMode = InsertionMode.InsertAfter, OnSuccess = "ClearTextBox" })) 
{ 
    @Html.TextArea("txtInput", new { id = "txtInput", cols = "20", rows = "5", wrap = "virtual" }) 
    <input id="send" class="button" type="submit" value="Send"/><br /> 
} 

これは、コントローラは、このビューを提供し、次のHTMLを生成します。私のビューのいずれかで、私はマイクロソフトのHTMLヘルパー関数を使用して構築された形を持っています上記Sendボタンがからテキストから明らかをクリックされるたびに、ここでやろうとすることはTextArea呼ばtxtInput内のテキストを取得し、TargetDivと呼ばDivの最後に追加していますは、追加の後にClearTextBox()メソッド(Javascript)を使用して完了します。 appendは常にすべてのブラウザで動作します。 Internet ExplorerやChromeで実行すると、テキストの消去は正常に機能します。しかし、FirefoxはClearTextBox()メソッドを呼びたくないようです。

Firefoxはフォームの署名でこのdata-ajax-successオプションと互換性がありませんか?私は

を試してみた


物事私はこの男を見つけました: Ajax.BeginForm doesn't call onSuccess

ソリューションは、このスクリプトを追加することです:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script> 

私はこのスクリプトを呼び出しています:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 

...しかし、私はちょうどその場合にそれを交換しようとしました。喜びはありません。

私は、HTMLは次のように出てきたように、C#のチャットルームでは一部の人々によって括弧を含めるようにメソッド呼び出しを変更してみてくださいするように頼まれた:

<form action="/WebChat/TMWC/UpdateForm" data-ajax="true" data-ajax-mode="after" data-ajax-success="ClearTextBox()" data-ajax-update="#chatText" id="form0" method="post"> 
    <textarea cols="20" id="txtInput" name="txtInput" rows="5" wrap="virtual"></textarea>  
    <input id="send" class="button" type="submit" value="Send"><br> 
</form> 

しかし、それは助けにはなりませんでした。 C#のチャットで

の人々はまた、私は警告とJavascriptの呼び出しを置き換える提案 - このような何か:クロムメッセージボックスをポップアップ表示しながら

<form action="/WebChat/TMWC/UpdateForm" data-ajax="true" data-ajax-mode="after" data-ajax-success="alert('yo!')" data-ajax-update="#chatText" id="form0" method="post"> 
    <textarea cols="20" id="txtInput" name="txtInput" rows="5" wrap="virtual"></textarea>  
    <input id="send" class="button" type="submit" value="Send"><br> 
</form> 

を、Firefoxはしません!

+0

"data-ajax-success"は、どのメソッドを呼び出すかを指定するカスタム属性のように見えるので、属性自体に問題があるとは思われません。私は何がdevのか分からない。 firefoxのツール(Chromeをほとんど使用しています)がありますが、コードのどこかにJSエラーがあるかどうかを確認します。 – justinb138

+0

Firebugを使用していますが、何も指摘していませんでした=( –

+0

'ClearTextBox()'メソッドを投稿できますか?これを試してみました(ファイル - >新しいmvc3プロジェクト、 'jquery.unobtrusive-ajax ClearTextBoxのバージョンは次のとおりです: 'function ClearTextBox(){$("#txtInput ")。val(" ");}' –

答えて

1

ステータスは、新しく作成されたASP.NET MVC 3アプリケーションでは表示されません。

コントローラー:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult UpdateForm() 
    { 
     return Content(DateTime.Now.ToLongTimeString()); 
    } 
} 

ビュー(~/Views/Home/Index.cshtml):クロム、FFとIEで完全に罰金

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script> 
<script type="text/javascript"> 
    function ClearTextBox() { 
     $('textarea').val(''); 
    } 
</script> 

<form action="/Home/UpdateForm" data-ajax="true" data-ajax-mode="after" data-ajax-success="ClearTextBox" data-ajax-update="#TargetDiv" id="form0" method="post"> 
    <textarea cols="20" id="txtInput" name="txtInput" rows="5" wrap="virtual"></textarea>  
    <input id="send" class="button" type="submit" value="Send"><br> 
</form> 

<div id="TargetDiv"></div> 

作品。

また、Content-TypeレスポンスHTTPヘッダーが実際に送信しているレスポンスと一致するようにすることもできます。例えば、非常に多くの人々が応答ボディに無効なJSONを含むapplication/jsonレスポンスヘッダーを送信し、より機密性の高いパーサーがチョークを生成することがわかりました。

+0

ご協力いただきありがとうございます! (将来の読者:質問の私の編集を参照してください) –

関連する問題