RedirectToAction无法按预期工作

时间:2011-11-21 11:14:21

标签: asp.net-mvc-3

我有一个简单的MVC3应用程序,我想从服务中检索一些配置细节,允许用户编辑和保存配置。

如果在保存过程中检测到任何错误,则会返回这些错误并将其报告给用户。

问题是无法调用包含错误的配置,并且只是重新显示当前保存的值。

单步执行代码,当检测到错误时,它应该使用传递的配置对象重定向到自身,但它不会使用没有参数的方法。

谁能看到我出错的地方?

下面是两个被调用的控制器方法:

//
// GET: /Settings/Edit/
    public ActionResult Edit()
{
    SettingsViewModel config = null;

    // Set up a channel factory to use the webHTTPBinding
    using (WebChannelFactory<IChangeService> serviceChannel =
        new WebChannelFactory<IChangeService>(new Uri(baseServiceUrl)))
    {
        // Retrieve the current configuration from the service for editing
        IChangeService channel = serviceChannel.CreateChannel();
        config = channel.GetSysConfig();
    }

    ViewBag.Message = "Service Configuration";

    return View(config);
}

//
// POST: /Settings/Edit/
[HttpPost]
public ActionResult Edit( SettingsViewModel config)
{
    try
    {
        if (ModelState.IsValid)
        {
            // Set up a channel factory to use the webHTTPBinding
            using (WebChannelFactory<IChangeService> serviceChannel = new WebChannelFactory<IChangeService>(new Uri(baseServiceUrl)))
            {
                IChangeService channel = serviceChannel.CreateChannel();
                config = channel.SetSysConfig(config);

                // Check for any errors returned by the service
                if (config.ConfigErrors != null && config.ConfigErrors.Count > 0)
                {
                    // Force the redisplay of the page displaying the errors at the top
                    return RedirectToAction("Edit", config);
                }
            }
        }

        return RedirectToAction("Index", config);
    }
    catch
    {
        return View();
    }
}

1 个答案:

答案 0 :(得分:2)

return RedirectToAction("Index", config);

重定向时,不能传递这样的复杂对象。您需要逐个传递查询字符串参数:

return RedirectToAction("Index", new {
    Prop1 = config.Prop1,
    Prop2 = config.Prop2,
    ...
});

此外,我在控制器中看不到索引操作。也许这是一个错字。我注意到的另一件事是你有一个编辑GET动作,你可能正在尝试重定向,但这个编辑动作不采取任何参数所以它看起来很奇怪。如果您尝试重定向到POST编辑操作,那么这显然是不可能的,因为重定向始终是GET的本质。