最終編集:
Darin Dimitrovからの回答に従った後、問題は、ControllerのメソッドへのAJAX呼び出しがUpdateForm()
空の文字列を返すことであることがわかりました。これは、別の問題が発生した後、しばらく前に必要だと思った変更です。空の文字列を渡すと、Firefoxのパーサーがチョークする原因になりました(ChromeとIEは明らかに気にしませんでしたが)。そのため、空の文字列を空の文字列に置き換えましたdiv
。
編集:
以下のDarinDimitrovの提案のおかげで、私が問題を抱えていた理由は、問題のフォームが送信されるたびにエラーがスローされたことが原因であることがわかりました。
エラーには、「ノードを階層内の指定されたポイントに挿入できません」と表示されます。これは、フォームが送信されるたびにスローされます。POSTデータで、これがXMLHttpRequestであると思われることに気づきました。それが原因ですか(問題のAJAXリクエストはHTMLを返すだけです)?FirebugからのPOSTデータは次のとおりです。
このエラーは、「XML解析エラー-要素が見つかりません」と表示されます。
参考までに-返されるHTMLは常に空の文字列です...
IIS7でMVC3アプリケーションを実行しています。私の見解の1つでは、MicrosoftHTMLヘルパー関数を使用してフォームを作成しています。
@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が生成されます。
<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>
私がここで基本的にやろうとしているのは、呼び出された内部のテキストを取得し、TextArea
上のボタンがクリックされるたびに呼び出されtxtInput
たものの最後に追加し、メソッド(Javascript)を使用して追加が完了した後にテキストをクリアすることです。追加は常にすべてのブラウザで機能します。Internet ExplorerまたはChromeで実行すると、テキストのクリアは問題なく機能します。ただし、Firefoxはメソッド を呼び出したくないようです。Div
TargetDiv
Send
txtInput
ClearTextBox()
ClearTextBox()
data-ajax-success
Firefoxはフォーム署名のこのオプションと互換性がありませんか?
私が試したこと
私はこの男を見つけました: Ajax.BeginFormは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>
Chromeはメッセージボックスを表示しますが、Firefoxは表示しません。