1

私は MVC の初心者なので、これは些細なことに聞こえるかもしれません。Views というフォルダーに 2 つのビュー (EnterLogin.aspx、ShowLogin.aspx) がありますLoginForm。これが私の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。直接一致するものがないため、アクションとしてデフォルトの toを入力EnterLoginしようとします(その結果、リクエストは失敗します)。基本的:EnterLogin{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と呼ばれるため、これは予想される動作です。

LoginFormをURLから除外する場合は、これを可能にするカスタムルートを定義する必要があります。

 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 に答える