对于无效的ModelState,Html.RenderAction无法在MVC2中的控制器中找到操作

时间:2011-01-04 16:15:05

标签: asp.net-mvc-2 error-handling

我在Views中的Person文件夹中有一个PersonController和一个名为“Add”的视图。

“添加”视图包含标题,名字,姓氏和电话号码。标题是具有预先填充值的下拉列表。要获得此下拉列表,请致电

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

调用该Action时,它将返回PartialView。 PartialView是预配置标题的下拉列表。

情景:

我有两个名为“添加”的控制器操作(一个获取,一个帖子)。在HttpGet上,它基本上加载了一个空白表单,包含标题下拉列表,空文本框等。当用户单击上传按钮时,它会调用“添加”HttpPost。在这个动作中,我做了一些验证检查,确保它们填写了必填字段等。如果字段为空,我向ModelState添加一个错误:

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

如果modelstate无效,我返回View,这样用户就可以看到验证错误消息。

只要ModelState有效,Action就会被正确呈现,但是,如果出现错误并且我向ModelState添加了一个错误并从HttpPost操作返回View,则会在以下视图中抛出HttpException: / p>

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

告诉我在“人员”控制器上找不到名为“标题”的操作。显然我知道它存在,因为它在ModelState中的任何错误之前执行得很好。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

将使用与首次调用的主要操作相同的HTTP方法调用子操作。

因此,我假设您已[HttpGet]标记了/Person/Titles行动。如果删除它,它应该可以工作。