MVC3为什么我会收到"不允许子操作执行重定向操作"错误?

Mar*_*z.W 5 redirect http-method asp.net-mvc-3 child-actions

我有一个动作列表

    //[HttpGet] (will come back to that!)
    public ViewResult List(int page = 1)
    {
        //blah blah blah
        return View(viewModel);
    }
Run Code Online (Sandbox Code Playgroud)

在它的视图中我们渲染动作:

@{        
    Html.RenderAction("UpdateSearch");
}
Run Code Online (Sandbox Code Playgroud)

行动定义:

[ChildActionOnly]
[HttpGet]
public PartialViewResult UpdateSearch()
{
    // do something and display a form in view
    return PartialView(so);
}

[HttpPost]
public RedirectToRouteResult UpdateSearch(Options searchOptions)
{
    // do something and redirect to List
    return RedirectToAction("List");
}
Run Code Online (Sandbox Code Playgroud)

而且我得到:每当有人提交表单时,不允许子操作执行重定向操作异常.我是MVC3的新手,但看起来重定向也是一个POST,因为如果[HttpGet]上面的List方法被取消注释"无法找到资源".

如何在重定向时更改Http方法或者我做错了什么?我确实试过Bing,但没有成功.

Vil*_*zka 3

重定向信息存储在响应标头中。但是,当子操作运行时,响应已经发送,因此无法写入标头。

简而言之,除了在客户端使用 JavaScript 之外,没有其他方法可以从子操作执行重定向。

  • 你说得对。要修复此问题,只需在 UpdateSearch 视图(Get、Child 版本)中向 BeginForm 方法添加操作参数即可,因此将: /@using (Html.BeginForm()) { 更改为: /@using (Html.BeginForm(" UpdateSearch")) { 解决了问题。你能解释一下为什么吗? (2认同)