2011-01-04 5 views
2

私は、PersonControllerとビューのPersonフォルダー内に "Add"という名前のビューを持っています。Html.RenderActionは、無効なModelStateのMVC2のコントローラーでアクションを見つけることができません

[追加]ビューには、タイトル、名、姓、電話番号が含まれています。タイトルは、事前設定された値を含むドロップダウンリストです。このドロップダウン・リストを取得するには、そのアクションが呼び出されたとき、私は

<% Html.RenderAction("Titles", "Person"); 

呼び出し、それがPartialViewを返します。 PartialViewは、事前設定されたタイトルのドロップダウンリストです。

シナリオ:

私は、「追加」という名前の2つのコントローラのアクション(1つの取得、および1ポスト)を持っています。 HttpGetでは、本質的に、タイトルのドロップダウンリスト、空のテキストボックスなどで空白のフォームを読み込みます。ユーザーがアップロードボタンをクリックすると、「追加」HttpPostが呼び出されます。このアクションの内部では、私は、彼らが必要なフィールドに記入してくださいすることなどをいくつかの妥当性チェックを行うフィールドが空白の場合、私はにModelStateにエラーを追加します。

if(string.IsNullOrEmpty(firstName)) 
{ 
    ModelState.AddModelError("person", "Person first name is required."); 
} 

にModelStateが有効でない場合、ビューを返すので、ユーザーは検証エラーメッセージを見ることができます。

ModelStateが有効である限り、アクションは正しくレンダリングされますが、エラーがあり、ModelStateにエラーを追加してHttpPostアクションからビューを返すと、HttpExceptionは次のビューでスローされます。

Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'. 

「タイトル」という名前のアクションが「人物」コントローラに見つかりません。明らかに、私はそれがそこにあることを知っています。何らかのエラーがModelStateに入る前に正常に実行されたからです。

アイデア?

答えて

0

子アクションは、最初に呼び出されたメインアクションと同じHTTPメソッドを使用して呼び出されます。

したがって、あなたの/Person/Titlesの行動には[HttpGet]とタグ付けされているものとします。これを削除すると動作します。

関連する問題