0

ASP.NET MVCには、アクションに投稿し、同じビューで応答をレンダリングするメインの標準フォームがあります。

問題は、応答タイプがapplication / x-javascriptとして返され、その結果、ブラウザーがHTMLをテキストとしてレンダリングしていることです。

JavaScriptResultを返すアクションにポストバックするフォームをレンダリングするマスターページにいくつかの部分的なビューが含まれていることが原因に問題を絞り込みました。

これらの部分的なビュー参照を削除すると、メインフォームの投稿応答からの応答タイプは必要なtext/htmlです。

JavaScriptResultアクションがメインフォームの投稿に干渉するのはなぜですか。私はこのアクションに投稿していませんが、MVCが応答コンテンツタイプをapplication / x-javascriptであると推測するのはなぜですか?

基本的なメインフォーム:

@using (Html.BeginForm("TestSearch", "TestSearch", FormMethod.Post))
{
    ....
}

[HttpPost]
public ActionResult TestSearch(TestSearchInfo testSearchInfo)
{
    ...

    return View(testSearchInfo);
}

レイアウトページ:

@{Html.RenderPartial("~/Views/Account/LoginOrRegister.cshtml");}

Which is a form that posts to...

[HttpPost]
public JavaScriptResult Login(LoginInfo loginInfo)
{
}

アップデート:

主要な問題は、メインフォームの送信ボタンを押すと、MVC ajaxが有効になっている他のフォームもポストバックしているため、両方のアクションが実行され、JavaScriptResultを返すフォームが次のようになることです。 2番目に発砲しています。この動作を防ぐ方法がまだわかりません...

アップデート:

以下の回答を参照してください

4

2 に答える 2

0

この問題を取り除くには、HTMLフォームのネストを避ける必要があると思います。これも意味的には正しくありません。

これはASP.NETWebFormsの時代の問題でしたが、ASP.NETMVCを使用するとはるかに簡単になるはずです。

于 2012-05-22T09:23:53.613 に答える
0

ここで答えてください、それが他の人に役立つことを願っています。

JavaScript応答を含むすべてのフォームを変更して、コントロールをレンダリングするアクション、従来はHttpGet属性を持つアクションでHttpGetを削除し、アクションがGETコンテキストとPOSTコンテキストの両方で起動できるようにしました。

これには、フォームが投稿するアクションの名前を変更する必要があるため、どのメソッドを起動するかについてあいまいさはありません。

これは理にかなっていると思います。私が期待していたのは、含まれているフォームがPOSTターゲットではない部分ビューのレンダリングでは、getオーバーロードを使用してレンダリングする必要があるということでした。なぜそれがうまくいかないのか理解しています。

// No GET / POST Attribute, this can no fire in both GET and POST contexts
public ActionResult Login()
{
    .. This will now fire for every page load, where as before the HttpGet
       filter only allowed to run in a GET context. 
}

[HttpPost]
public JavaScriptResult DoLogin(LoginInfo loginInfo)
{
}
于 2012-05-22T10:23:48.350 に答える