我正在建立一个内部网,我有以下家庭控制器:
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(没有任何控制器或没有添加带索引的单独表单控制器)?
答案 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 }
);
似乎解决了这个问题