У меня есть файл Login.aspx в моей общей папке. Когда я нажимаю кнопку «logut», это приводит меня в действие SessionController-> LogOut. У меня проблемы.Как перенаправить на .aspx из контроллера MVC.NET
Мой
FormsAuthentication
не выписан.получает ошибку при перенаправлении 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>
Сори, это было wrnogly отредактирован. У меня есть <% @ Page Language = "C#"%> наверху –
Я не понимаю, что такое «YourModelClassName». У меня нет mdoel для этого contorller ... –
Затем оставьте общий аргумент. –