我有一个简单的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();
}
}
答案 0 :(得分:2)
return RedirectToAction("Index", config);
重定向时,不能传递这样的复杂对象。您需要逐个传递查询字符串参数:
return RedirectToAction("Index", new {
Prop1 = config.Prop1,
Prop2 = config.Prop2,
...
});
此外,我在控制器中看不到索引操作。也许这是一个错字。我注意到的另一件事是你有一个编辑GET动作,你可能正在尝试重定向,但这个编辑动作不采取任何参数所以它看起来很奇怪。如果您尝试重定向到POST编辑操作,那么这显然是不可能的,因为重定向始终是GET的本质。