MVC路由属性没有控制器

时间:2015-06-15 13:55:55

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

我正在建立一个内部网,我有以下家庭控制器:

http://intranet/forms

我正在尝试让我的表单主页有一个 [Route("~/forms")] // have also tried 'forms' and '/forms' public ActionResult FormsHome() 的网址,所以我想我可以使用以下路由属性来执行此操作:

[RoutePrefix("")]

但是当我去网址时,它抱怨多个控制器都有这条路线:

  

请求已找到以下匹配的控制器类型:   HRWebForms.Website.Controllers.ChangeDetailsController   HRWebForms.Website.Controllers.InternalTransferController   HRWebForms.Website.Controllers.LeaverController   ...

我还尝试将 <body> <div data-role="page" id="login"> <div data-role="header" data-theme="c"> <h2 align="center"> <strong>Sign In</strong> </h2> </div> <div data-role="content"> <form name="login" class="ui-corner-all" method="post" action=""> <label for="username" class="ui-hidden-accessible">Username:</label> <input type="text" id="username" name="username" placeholder="Username" required> <br> <br> <label for="password" class="ui-hidden-accessible">Password:</label> <input type="password" id="password" name="password" placeholder="Password" required> <br> <fieldset class="ui-grid-a"> <div class="ui-block-a"> <input name="login" type="submit" id="login" formmethod="POST" value="login" data-ajax="false" data-theme="b"> </div> <div class="ui-block-b"> <a href="Registration.html" data-ajax="false" data-role="button" data-theme="b">Not a user? Sign Up</a> </div> </fieldset> </form> <?php $link = new mysqli("localhost", "root", "root", "test"); /* check connection */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } if (isset($_POST["login"]) && !empty($_POST["login"])) { $user = stripslashes($_POST['username']); $pass = stripslashes($_POST['password']); $user = mysqli_real_escape_string($link, $user); $pass = mysqli_real_escape_string($link, hash("SHA1",($pass))); if ($user && $pass) { // CHECK ALL FIELD HAS BEEN FILLED UP // QUERY FROM DATABASE $sql = "SELECT * FROM users WHERE username='".$user."'"; $query =mysqli_query($link,$sql) or die(mysqli_error($link)); $numrows = mysqli_num_rows($query); if($numrows !== 0) { while ($row = mysqli_fetch_assoc($query)) { $username = $row['username']; $password = $row['password']; } if($user==$username && $pass==$password) { session_start(); echo "you are logged in"; @$_SESSION['username'] = $username; } else { echo "your password is incorrect"; } } else die ("that user doesn't exist!"); } else die ("Please enter a username and password"); } ?> </div> </div> </body> 添加到控制器,但这不起作用

有没有办法通过使用路由属性为该操作提供“表单”的URL(没有任何控制器或没有添加带索引的单独表单控制器)?

2 个答案:

答案 0 :(得分:0)

您可以尝试将[RoutePrefix(&#34; forms&#34;)]添加到您的控制器,但这会导致您的所有操作都需要相同的前缀。

这也有一个解决方法(通过使用[Route(&#34;〜/ RouteParam / AnotherRouteParam&#34;)]来获得Route&#34; RouteParam / AnotherRouteParam&#34;)但在我看来FormsController的工作成本会降低。

答案 1 :(得分:0)

好的,所以ranquild的评论让我朝着正确的方向前进。在我的路由配置中,我有

的默认路由
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

这样我的主页仍然可以在网址上工作。如果我将其更改为

// Needed for homepage
routes.MapRoute(
    name: "Home",
    url: "",
    defaults: new { controller = "Home", action = "Index" }
);

// Needed for Html.ActionLink to work
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}",
    defaults: new { controller = UrlParameter.Optional, action = UrlParameter.Optional }
);

似乎解决了这个问题