0

У меня есть файл Login.aspx в моей общей папке. Когда я нажимаю кнопку «logut», это приводит меня в действие SessionController-> LogOut. У меня проблемы.Как перенаправить на .aspx из контроллера MVC.NET

  1. Мой FormsAuthentication не выписан.

  2. получает ошибку при перенаправлении Login.aspx:

System.InvalidOperationException: взгляд на '~/Views/Shared/login.aspx' должен быть производным от ViewPage, ViewPage, ViewUserControl , или ViewUserControl.

Я получил этот код:

Мой контроллер:

public class SessionController : Controller 
{ 
    public ActionResult LogOut() 
    { 
     if (Request.Cookies["Usuario"] != null) 
     { 
      FormsAuthentication.SignOut(); 
      var c = new HttpCookie("Usuario"); 
      c.Expires = DateTime.Now.AddDays(-1); 
      Response.Cookies.Add(c); 
     } 
     return View("Login"); 
    } 
} 

мое призвание от HTML де Conttroller:

<ul class="dropdown-menu"> 
    <li><a id="logout" href="~/Session/LogOut">Log out</a></li> 
</ul> 

И login.aspx:

<%@ Page Language="C#" %> 

<%@ Import Namespace="System.Data" %> 
<%@ Import Namespace="System.Data.SqlClient" %> 
<%@ Import Namespace="System.Web.Security " %> 
<%@ Import Namespace="System.IO" %> 

<html> 
<head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <title>Forms Authentication</title> 
    <link href="https://getbootstrap.com/dist/css/bootstrap.min.css" rel="stylesheet"> 
    <link href="https://getbootstrap.com/assets/css/ie10-viewport-bug-workaround.css" rel="stylesheet"> 
    <link href="https://getbootstrap.com/examples/signin/signin.css" rel="stylesheet"> 
    <script src="https://getbootstrap.com/assets/js/ie-emulation-modes-warning.js"></script> 

    <script runat="server"> 
     private void Logon_Click(Object sender, EventArgs e) 
     { 
      string cmd = "User='" + User.Value + "'"; 
      DataSet ds = new DataSet(); 
      FileStream fs = new FileStream(Server.MapPath("Users.xml"), FileMode.Open, FileAccess.Read); 
      StreamReader reader = new StreamReader(fs); 
      ds.ReadXml(reader); 
      fs.Close(); 
      DataTable users = ds.Tables[0]; 
      DataRow[] matches = users.Select(cmd); 
      if (matches != null && matches.Length > 0) 
      { 
       DataRow row = matches[0]; 
       string hashedpwd = FormsAuthentication.HashPasswordForStoringInConfigFile(Password.Value, "SHA1"); 
       string pass = (String)row["Password"]; 
       if (0 != String.Compare(pass, hashedpwd, false)) 
        Msg.Text = "<div class='alert alert-danger'>Usuario y contraseña no coinciden.</div>"; 
       else 
       { 
        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, 
         User.Value, 
         DateTime.Now, 
         DateTime.Now.AddDays(5), 
         Persist.Checked, 
         "abc", 
         FormsAuthentication.FormsCookiePath); 
        string encTicket = FormsAuthentication.Encrypt(ticket); 
        Response.Cookies.Add(new HttpCookie("Usuario", encTicket)); 
        Response.Redirect("~/Factura"); 


       } 
       /*FormsAuthentication.SetAuthCookie(User.Value, Persist.Checked); 
       Response.Redirect("~/Factura");*/ 
      } 
      else 
      { 
       Msg.Text = "<div class='alert alert-danger'>Usuario y contraseña no coinciden.</div>"; 
      } 
     } 
    </script> 
</head> 
<body> 
    <div class="container"> 
     <form runat="server" class="form-signin"> 
      <h2 class="form-signin-heading">Login</h2> 
      <label for="User" class="sr-only">Email address</label> 
      <input id="User" class="form-control" type="text" placeholder="Nombre de usuario" title="Solo numeros y letras" pattern="^[A-Za-z]*$" required autofocus runat="server" /> 
      <label for="Password" class="sr-only">Contraseña</label> 
      <input id="Password" class="form-control" type="password" placeholder="Contraseña" required runat="server" /> 
      <asp:Literal ID="Msg" runat="server" /> 
      <div class="checkbox"> 
       <label> 
        <asp:CheckBox ID="Persist" runat="server" 
         AutoPostBack="true" /> 
        Recordar contraseña 
       </label> 
      </div> 
      <input type="submit" class="btn btn-lg btn-primary btn-block" onserverclick="Logon_Click" value="Login" 
       runat="server" /> 
     </form> 
    </div> 
    <script src="https://getbootstrap.com/assets/js/ie10-viewport-bug-workaround.js"></script> 
</body> 
</html> 

ответ

0

Как видно из исключения, MVC-представления должны наследовать определенные классы инфраструктуры MVC, чтобы их можно было рассматривать как виды MVC.

В случае представления двигателя ASPX вам нужно указать это в явном виде, например

<%@ Page Language="C#" 
    Inherits="System.Web.Mvc.ViewPage<YourModelClassName>" %> 

или

Inherits="System.Web.Mvc.ViewPage" 

, если ваше мнение не ожидает какой-либо модели.

+0

Сори, это было wrnogly отредактирован. У меня есть <% @ Page Language = "C#"%> наверху –

+0

Я не понимаю, что такое «YourModelClassName». У меня нет mdoel для этого contorller ... –

+0

Затем оставьте общий аргумент. –

0

Надеется, что это помогает

return Redirect("url"); 

или

return RedirectToRoute("routename"); // Specify route in the Route Config file. 

 Смежные вопросы

  • Нет связанных вопросов^_^