6

最終編集:

Darin Dimitrovからの回答に従った後、問題は、ControllerのメソッドへのAJAX呼び出しがUpdateForm()空の文字列を返すことであることがわかりました。これは、別の問題が発生した後、しばらく前に必要だと思った変更です。空の文字列を渡すと、Firefoxのパーサーがチョークする原因になりました(ChromeとIEは明らかに気にしませんでしたが)。そのため、空の文字列を空の文字列に置き換えましたdiv

編集:

以下のDarinDimitrovの提案のおかげで、私が問題を抱えていた理由は、問題のフォームが送信されるたびにエラーがスローされたことが原因であることがわかりました。

JQueryエラー

エラーには、「ノードを階層内の指定されたポイントに挿入できません」と表示されます。これは、フォームが送信されるたびにスローされます。POSTデータで、これがXMLHttpRequestであると思われることに気づきました。それが原因ですか(問題のAJAXリクエストはHTMLを返すだけです)?FirebugからのPOSTデータは次のとおりです。

POSTデータ1

POSTデータ2

POSTデータ3

このエラーは、「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はメソッド を呼び出したくないようです。DivTargetDivSendtxtInputClearTextBox()ClearTextBox()

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


私が試したこと

私はこの男を見つけました: 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は表示しません。

4

1 に答える 1

1

新しく作成されたASP.NETMVC3アプリケーションのステータスは再現されません。

コントローラ:

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

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

ビュー(~/Views/Home/Index.cshtml):

<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>

Chrome、FF、IEで問題なく動作します。

また、Content-Type応答HTTPヘッダーが送信する実際の応答と一致することを確認することもできます。たとえば、非常に多くの人がapplication/json応答本文に無効なJSONを含む応答ヘッダーを送信するのを見てきました。これにより、チョークに対してより敏感なパーサーが生成されます。

于 2012-06-22T21:11:21.160 に答える