routes.MapRoute自定义:传入请求与任何路由都不匹配

时间:2014-06-12 15:44:30

标签: c# asp.net-mvc

您好我是MVC的新手:并得到错误"传入的请求与任何路由都不匹配"

控制器controllerWorkflowTestController.cs具有代码:

public class WorkFlowTestController : Controller
{
    public ActionResult openSampleView(Models.WorkFlowTest  model)
    {

        if (model.SubmissionId  != null)
        {
            return View("Submission");
        }
        return null;
    }


}

模型有代码:

   namespace MockBDPWorkflowTestApp.Models

   {

           public class WorkFlowTest

           {
             public string SubmissionId { get; set; }

           }
  }

}

在全球.asax中我有:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
       "Default",
       "WorkFlowTest/openSampleView/&SubmissionId=1",
       new { controller = "WorkFlowTest", action = "openSampleView", id = "" }
       );

    }

这会产生错误传入的请求与任何路由都不匹配。这看起来很简单但没有在MVC中定制路由的经验。我只需要为我的操作传递参数的网址" openSampleView" ,以便它接受参数值并呈现视图。我已经使用模型参数,但任何建议,以纠正这一点表示赞赏,谢谢。

1 个答案:

答案 0 :(得分:1)

如果要在URL中传递SubmissionId,则需要将其作为操作的参数,而不是模型。在从视图中POST数据时使用model作为参数。此外,如果您想在视图中使用该模型,则需要将其传入。

这样就给出了

的控制器动作
public ActionResult openSampleView(string submissionId)
{
    if (submissionId == null) return null;
    var model = new Models.WorkFlowTest {SubmissionId = submissionId};
    return View("Submission", model);
}

在您的路线中,您可以在传递submissionId时定义您想要的任何网址。一个例子是:

routes.MapRoute("Submission", "submissions/{submissionId}", new { controller = "WorkFlowTest", Action = "openSampleView" });

然后,网址http://www.example.com/submissions/1应该适用于ID为1的提交(显然将www.example.com替换为您的网站)。

要在视图中使用提交ID,您需要将视图绑定到模型,并在视图的开头添加以下行。

@model MockBDPWorkflowTestApp.Models.WorkFlowTest

然后在视图中,您可以使用

检索ID
@Model.SubmissionId