1

我是 MVC 新手,所以这听起来很简单。我LoginForm在 Views 中调用的文件夹中有我的 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视图,但它在 URL 中查找

http://localhost:50224/EnterLogin

代替

http://localhost:50224/LoginForm/EnterLogin

这可能是什么原因造成的?

4

3 回答 3

1

你没有登陆你想要的地方的原因是action你的表格的一部分:

action="EnterLogin"

这应该遵循正确的路线以确保它击中LoginFormController. 例如

action="/LoginForm/EnterLogin"

请记住,传入请求需要匹配RegisterRoutes. 因为您没有任何直接匹配的EnterLogin内容,所以它会尝试使用then default toEnterLogin填写作为操作(导致请求失败)。基本上:{controller}ShowLogin

EnterLogin  ==resolves==>  EnterLogin  /ShowLogin/
                           {controller}/{action} /{id}

或者,如果您想简写它,您可以创建一个将重定向到正确位置的命名路由:

action="LogMeIn"

进而:

routes.MapRoute(
    "Login",
    "LogMeIn",
    new { controller = "LoginForm", action = "EnterLogin" }
);

现在请求/LogMeIn将执行LoginFormEnterLogin()动作。

于 2012-11-07T13:37:01.407 回答
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
    );
于 2012-11-07T13:35:10.177 回答
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>

登录表单控制器:-

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();
    }
}
于 2012-12-14T09:24:12.933 回答