我是一名MVC新手,所以这可能听起来微不足道。我在视图中名为LoginForm
的文件夹中有我的2个视图(EnterLogin.aspx,ShowLogin.aspx)。
这是我下面的Global.asax.cs
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "LoginForm", action = "ShowLogin", id = UrlParameter.Optional } // Parameter defaults
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
}
}
这是我的ShowLogin.aspx设计代码
<form method="post" action="EnterLogin" runat="server">
Hello, i'm login page
Enter Name <asp:TextBox ID="txtName" runat="server"></asp:TextBox>
<input type="submit" value="PressMe" />
</form>
这是我的控制器
public class LoginFormController : Controller
{
public ActionResult ShowLogin()
{
return View();
}
public ActionResult EnterLogin()
{
return View("EnterLogin");
}
}
在运行应用程序时,首先使用url加载
http://localhost:50224/
并显示ShowLogin.aspx视图
点击按钮我正在呼叫EnterLogin
控制器以显示EnterLogin
视图,但它在网址中显示
http://localhost:50224/EnterLogin
而不是
http://localhost:50224/LoginForm/EnterLogin
导致这种情况的原因是什么?
答案 0 :(得分:1)
您未登陆的原因是表单的action
部分:
action="EnterLogin"
这应该遵循正确的路线以确保它达到LoginFormController
。 e.g。
action="/LoginForm/EnterLogin"
请记住,传入的请求需要与RegisterRoutes
中指定的路由匹配。由于您没有与EnterLogin
直接匹配的内容,因此会尝试使用EnterLogin
填充{controller}
,然后默认为ShowLogin
作为操作(导致请求失败) )。基本上是:
EnterLogin ==resolves==> EnterLogin /ShowLogin/
{controller}/{action} /{id}
或者你可以制作一个命名路线,如果你想短信,它会重定向到正确的位置:
action="LogMeIn"
然后:
routes.MapRoute(
"Login",
"LogMeIn",
new { controller = "LoginForm", action = "EnterLogin" }
);
现在请求/LogMeIn
将执行LoginForm
的{{1}}操作。
答案 1 :(得分:0)
Global.asax中定义的默认路由定义了具有/ controller / action的路由。
您的控制器名为LoginForm,您的操作称为EnterLogin,因此这是预期的行为。
如果要从URL中排除LoginForm,则需要定义一个自定义路由以允许此操作。
routes.MapRoute(
"LoginForm_EnterLogin", // Route name
"LoginForm/EnterLogin/{id}", // URL with parameters
new { controller = "LoginForm", action = "ShowLogin", id = UrlParameter.Optional } // Parameter defaults
);
答案 2 :(得分:0)
你可能会做这样的事情
Global.asax.cs: -
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "LoginForm", action = "ShowLogin", id = UrlParameter.Optional } // Parameter defaults
);
ShowLogin.aspx: -
<form method="post" action="EnterLogin" runat="server">
Hello, i'm login page
Enter Name <input type="text" name="txtName"/>
<input type="submit" value="PressMe" /> </form>
LoginFormController: -
public class LoginFormController : Controller
{
public ActionResult ShowLogin()
{
return View();
}
[HttpPost]
public ActionResult EnterLogin(FormCollection collection)
{
string Yourtxtname=Collection["txtName"]; //You will get input text value
return View();
}
}