2
我对MVC非常陌生,并且正在尝试向已经开发的应用程序添加更多功能。MVC返回视图()问题
我无法在验证呈现模型无效后返回带有发布结果的视图。
我的控制器具有值得注意的三个动作:由于此前的规定的
public ActionResult Create(int workID)
[HttpParamAction]
[HttpPost]
public ActionResult SaveNormal(WorkViewModel workView)
[HttpParamAction]
[HttpPost]
public ActionResult SaveAddAnother(WorkViewModel workView)
,我不得不改变提交行动,使上述两个中的一个被称为与公布结果。一切工作正常,除了是我想要回后由于模型状态无效的,这我试图用以下几点:
if (!ModelState.IsValid)
return View("Create", workView);
它不带我去创建(Create.aspx)查看,但URL是Work/Action,而不是Work/Create,这意味着当我重新保存时,找不到Work/Action。
我不知道这是否是一个路由的问题,但都低于供给路线(这基本上是默认的,我认为...):
public static void RegisterRoutes(RouteCollection routes)
{
// This is the original
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new {
controller = "Home",
action = "Index",
id = UrlParameter.Optional
} // Parameter defaults
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
}
任何帮助将非常感激!
谢谢 - 我已经使用TempData重定向来存储模型,虽然我失去了验证消息。我需要在TempData中传递ModelState吗? – user676767 2011-05-31 21:46:43
简短的回答是**是**。更长的回答是,您可能想重新考虑以下决定:*由于之前的要求,我必须更改提交操作,以便上述两个中的一个与发布结果一起调用* 尝试进行一个提交操作“创建”并在那里检查模型状态的逻辑,适当时保存,创建新的(这只是简单地返回创建一个新的空视图),等等。看起来更清洁和更简单。 – Felix 2011-05-31 21:53:33
好吧,我也在TempData中传递了ViewData(它包含invlaid modelstate)。 在回应重新思考时,控制器就是这样设置的,因为我们希望在页面上有两个按钮,允许两个按钮提供不同的操作,保存(插入和重定向到其他页面)和SaveAndAddOther(插入并用新模型重新加载)。我当时似乎记得,这是实现这一目标的唯一方法,但是我可能会错过另一个解决方案。 – user676767 2011-05-31 22:28:17