2011-05-31 119 views
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); 
} 

任何帮助将非常感激!

回答

1

该URL基于操作名称;不在视图名称上。您可能需要RedirectToAction("Create"...)并从那里发出查看()

+0

谢谢 - 我已经使用TempData重定向来存储模型,虽然我失去了验证消息。我需要在TempData中传递ModelState吗? – user676767 2011-05-31 21:46:43

+0

简短的回答是**是**。更长的回答是,您可能想重新考虑以下决定:*由于之前的要求,我必须更改提交操作,以便上述两个中的一个与发布结果一起调用* 尝试进行一个提交操作“创建”并在那里检查模型状态的逻辑,适当时保存,创建新的(这只是简单地返回创建一个新的空视图),等等。看起来更清洁和更简单。 – Felix 2011-05-31 21:53:33

+0

好吧,我也在TempData中传递了ViewData(它包含invlaid modelstate)。 在回应重新思考时,控制器就是这样设置的,因为我们希望在页面上有两个按钮,允许两个按钮提供不同的操作,保存(插入和重定向到其他页面)和SaveAndAddOther(插入并用新模型重新加载)。我当时似乎记得,这是实现这一目标的唯一方法,但是我可能会错过另一个解决方案。 – user676767 2011-05-31 22:28:17