使用子操作重定向到控制器

时间:2013-11-11 17:17:29

标签: asp.net-mvc asp.net-mvc-5

我对MVC完全不熟悉,所以请原谅我使用错误的术语。我正在构建一个使用以下格式的控制器,以显示项目,以及该项目中的步骤。

注意:我正在使用MVC5,它使用新引入的路由属性。

'/project/1/step/2
<Route("{ProjectID}/Step/{StepNumber:int}")>
Function ProjStep(ProjectID As String, StepNumber As Integer) As String
   Return String.Format("Project {0} Step {1}", ProjectID, StepNumber)
End Function

以上工作符合预期。但我也想处理用户只指定项目而不是步骤的情况。

'/Project/1
<Route("{ProjectID}")>
Sub Projuate(ProjectID As String)
   'Automatically start the user at step 555  
   'How do I send the user to the URL /Project/ProjectID/Step/555  
End Sub

2 个答案:

答案 0 :(得分:2)

道歉,如果语法稍微偏离 - 我在C#中做我的MVC。

您可以直接调用步骤操作或重定向到它。

前(这会将URL保留为/ Project / 1):

Function Projuate(projectID As String)
  Return ProjStep(projectID,555)
End Sub

后期(将以/ Project / 1 / Step / 555结束):

Function Projuate(projectID As String)
  Return Redirect(Url.Action("ProjStep", new{ ProjectID = projectID, StepNumber=555})
End Sub

我不知道T4MVC是否适用于VB,但我会检查出来 - 因为这意味着你可以摆脱那些神奇的字符串并获得一些很好的扩展来创建URL。

编辑注意:将子更改为功能。

答案 1 :(得分:0)

只需将默认值添加到路径可能是最简单的方法:

<Route("{ProjectID}/Step/{StepNumber:int=555}")>
Function ProjStep(ProjectID As String, StepNumber As Integer) As String
    Return String.Format("Project {0} Step {1}", ProjectID, StepNumber)
End Function

P.S。我希望它出现在int之后 - 它可能是StepNumber = 5:int我所知道的全部。