Asp.net mvc MVC返回视图()问题
我是MVC的新手,正在尝试为已经开发的应用程序添加更多功能 在验证导致模型无效后,返回带有已发布结果的视图时遇到问题 我的控制器有三个值得注意的动作:Asp.net mvc MVC返回视图()问题,asp.net-mvc,Asp.net Mvc,我是MVC的新手,正在尝试为已经开发的应用程序添加更多功能 在验证导致模型无效后,返回带有已发布结果的视图时遇到问题 我的控制器有三个值得注意的动作: public ActionResult Create(int workID) [HttpParamAction] [HttpPost] public ActionResult SaveNormal(WorkViewModel workView) [HttpParamAction] [HttpPost] public ActionResult
public ActionResult Create(int workID)
[HttpParamAction]
[HttpPost]
public ActionResult SaveNormal(WorkViewModel workView)
[HttpParamAction]
[HttpPost]
public ActionResult SaveAddAnother(WorkViewModel workView)
由于前面的要求,我不得不更改submit操作,以便使用发布的结果调用上面两个操作中的一个。一切正常,但由于模型状态无效,我正在尝试发回,我正在尝试以下操作:
if (!ModelState.IsValid)
return View("Create", workView);
它确实将我带到create(create.aspx)视图,但是URL是Work/Action,而不是Work/create,这意味着当我重新保存时,找不到Work/Action
我不确定这是否是路由问题,但提供了以下路由(我认为基本上是默认路由…):
任何帮助都将不胜感激 URL基于操作名称;不在视图名称上。您可能需要
重定向到操作(“创建”…)
并从此处发出View()谢谢-我已使用TempData重定向以存储模型,尽管我正在丢失验证消息。我需要在TempData中传递ModelState吗?简短的回答是肯定的。较长的答案是,您可能需要重新考虑以下决定:由于前面的要求,我必须更改submit操作,以便使用发布的结果调用上面两个操作中的一个,尝试使用一个submit操作“Create”,并在那里使用逻辑来检查模型状态、保存(如果合适)、创建新的(这只是返回创建一个新的空视图)等等。看起来更干净、更简单。好的,我还传递了ViewData(其中包含invlaid modelstate)在TempData中,为了回应重新思考,控制器是这样设置的,因为我们希望在页面上有两个按钮,允许两个按钮都被单击以提供不同的操作、保存(插入并重定向到其他页面)和保存和添加其他(插入并重新加载新模型)。我当时似乎记得这是唯一的方法,但我可能错过了另一个解决方案。顺便感谢您的帮助!您完全可以有两个按钮指向同一个Post操作。formData将具有实际单击的按钮的名称。但我意识到,这是一个不同的主题:)
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);
}