2009-12-28 106 views
1

我创建了一个路由结构,而URL的动作部分充当了一个动态处理器,用于选择特定用户创建的系统名称。即带动态路由的MVC Post

http://mysite.com/Systems/[SystemName]/Configure,其中[SystemName]指定他们想要配置的系统的名称。

的路由系统是以下的方法:

public ActionResult Index(string systemName, string systemAction) 
    { 

     ViewData["system"] = _repository.GetSystem(systemName); 
     if (systemAction != "") 
     { 
      return View(systemAction); 
     } 
     else 
     { 
      // No Id specified. Go to system selection. 
      return View("System"); 
     } 
    } 

上述方法设置系统配置和路由到其中显示视图的静态方法和形式等待值。

我的问题是,当我创建我的配置视图,当表单被提交时,我失去了我的发布值,因为它将路由回上述的索引控制器。如何确定数据是否在点击我的上述指数控制器时发布,以便我可以做出决定?

谢谢! 乔治

回答

1

标注处理该POST这样的控制方法:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Index(string systemName, string systemAction) 
{ 
    // Handle posted values. 
} 

你可以在你的控制器不同的方法处理的GET:

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult Index(string systemName, string systemAction) 
{ 
    // No posted values here. 
} 

需要注意的是,虽然我在每种情况下都复制了相同的方法和参数,第二种方法(参数和类型)的签名将不得不不同,以便这两种方法不是不明确的。

这个NerdDinner tutorial has examples

+0

请记住,即使使用HttpPostAttribute/HttpGetAttribute,这两个动作名称也是模糊的。 – 2009-12-28 18:01:54

+0

没错,你必须改变其中一个签名。 – 2009-12-28 18:03:17

+0

我仍然不确定这是否解决了我的问题。我有一个控制器,通过中心点路由一切,并对动作做出动态选择。我只需要保持相同的索引控制器签名,但需要能够将系统路由到适当的操作,然后确定是否发生了帖子。这有意义吗? – 2009-12-28 18:26:24