web-dev-qa-db-ja.com

ビュー内のハンドラーの子要求の実行エラー

次のアクションをレンダリングするMVC 4ビューがあります

@{
    Html.RenderAction("Index", "Logo");
    Html.RenderAction("Index", "MainMenu");
}

ビューにフォームを記入し、コントローラーに投稿します。コントローラーでいくつかのタスクを実行し、モデルをビューに送り返します

[HttpPost]
public ActionResult Index(ManageAdministratorModel manageAdministratorModel)
{
     // I save some of the fields to the database here.
     return View(manageAdministratorModel);
}

ビューにリダイレクトされると、次のエラーが表示されます

ハンドラー 'System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper'の子要求の実行エラー。

この行に

Html.RenderAction("Index", "Logo");

なぜこれが起こっているのでしょうか?

29
Andre Lombaard

わかりました、私は問題を見つけました、うまくいけばこれは将来誰かを助けるでしょう。

部分ビューのコントローラーにはそれぞれ[HttpGet]属性。例えば

[HttpGet]
public ActionResult Index()
{
}

両方のコントローラーから属性を削除します

public ActionResult Index()
{
}

そして今、すべてが機能しています。

28
Andre Lombaard

部分ビューにコードフォーマットエラーが含まれていると、かみそりでこのエラーが発生しました。

[続行]をクリックしてエラーを回避すると、実際のエラーメッセージがロード元のブラウザウィンドウに表示されます。

部分ビューのエラーを修正すると、機能します!

26
Luke

交換:

return View(manageAdministratorModel);

で:

return PartialView(manageAdministratorModel);

そうしないと、ビューをレンダリングしようとしているビューをレンダリングしようとしているビューをレンダリングしているため、無限ループで終了している可能性があります...

また、子アクションから[HttpPost]属性を削除する必要がある場合があります。

9
Darin Dimitrov

「子アクションのみ」の例は次のとおりです。

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

        [ChildActionOnly]
        public ActionResult Departments()
        {
            string s = "Mahi and kallu";
            return View(s);
        }

    }

**for this am creating 2 views** 
1) Index:

    <html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div>
         @Html.Partial("Departments","Filters")

</body>
</html>
**and for Departments View:**
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Departments</title>
</head>
<body>
    <div>
       @Model      
    </div>
</body>
</html>


the ***childactions*** can be rendered with the help of "Partial" keyword.
2
mtrivedi

レイアウトを取り除く@{ Layout = null; }子ビューで。

2
user2021262

私はまったく同じ問題を抱えていました。属性ルーティングを使用していたため、内部例外エラーメッセージは次のとおりでした。

No matching action was found on controller ''. 
This can happen when a controller uses RouteAttribute for routing, 
but no action on that controller matches the request.

Html.Action()によって呼び出されるアクションメソッドから[HttpGet]属性を削除すると、機能します。ルーティングとは関係ありません。

1
nmit026

私はこの問題を抱えていました、レンダリングエンジンがビューを見つけられないために発生する可能性があります(actonで指定された名前に対応) PartialView()メソッドを使用してビュー名とビューモデルを返し、ビュー名を修正し、うまく機能しました

1
Code_Worm

同じエラーが発生しました。アクションを別のコントローラーに変更したときに開始されたため、プログラムを実行するとフォルダー内にビューが見つかりませんでした。 つまり、アクションを別のコントローラーに移動する場合は、ビューをそれぞれのフォルダーのコントローラーにも移動します

1

私はさまざまな地域からの眺めを呼んでいたので、これは私に起こりました。

呼び出したいビューはエリア内ではなかったので、すべてのエリアの外側からそれを呼び出すと、

@Html.RenderAction("Index", "Logo");

問題なく動作します。

しかし、同じビューがエリア内にある別のビューから呼び出されるようにしたい場合、呼び出しにいくつかの追加情報を追加して明示的にする必要があります。

@Html.RenderAction("Index", "Logo", new { area = "" });

0
DrCopyPaste

私はこのエラーを受け取りましたが、私の問題は異なっていました。エラーの内容を確認するには、次のようにtry catchコード内にエラーを取得する行を含めます。

 try 
    {           
         @Html.RenderAction("Index", "Logo", new {id = Model.id});
    }
    catch (Exception e)
    {
        throw;
    }    

スロー行にブレークポイントを設定して実行し、「e」の内部例外を確認します。私の問題は、コントローラーでパラメーター名を変更し、ビューで変更するのを忘れていたことです。

Try catchを使用してエラーを取得する方が簡単です。

0
Lucas

私は同じ問題に直面していましたが、関数名の上に[HTTPGet]属性を置いたので、うまくいきました。

[HttpGet]
//for Filter parital view
[ChildActionOnly]
public ActionResult Filter()
{ 
  // Your code will come here.
}
0
Fox Eyes