rgunta simples do ASP.NET M
-
30-09-2020 - |
Pergunta
03Cp> Estou criando a página de login do ASP.NET MVC. Isso é simples. Mesmo que os outros. O controlador contém 2 métodos.u003C/
03Cp> Meu problema éu003C/
03Cp> Estou depurando primeiro método LogOn
. ReturnUrl
tem valor. Por exemplo, "Admin/Index"
. Após o segundo método de depuração do segundo LogOn
. Mas ReturnUrl
é nulo.u003C/
public ActionResult LogOn(string ReturnUrl) // First method
{
return View();
}
[HttpPost]
public ActionResult LogOn(string eUserName, string ePassword, Boolean rememberMe, string ReturnUrl) //Second Method
{
...
}
03Cp> Minha visão está aqui >>u003C/
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Login</title>
</head>
<body>
<table style="width: 100%">
<tr>
<td align="center">
<div style="width: 800px;">
<%=Html.ValidationSummary() %>
</div>
</td>
</tr>
<tr>
<td align="center">
<% Html.RenderPartial("LoginControl"); %>
</td>
</tr>
</table>
</body>
</html>
03Cp> Logincontrol.u003C/
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<div style="text-align: left; width:150px;margin-top:20px;">
<% using (Html.BeginForm("Logon", "Account", FormMethod.Post))
{ %>
<div>
Хэрэглэгчийн нэр:</div>
<div>
<%= Html.TextBox("eUserName") %>
</div>
<div style="margin-top:5px;">
Нууц үг:</div>
<div >
<%= Html.Password("ePassword") %>
</div>
<div style="margin-top:5px;">
<%= Html.CheckBox("rememberMe") %>
<label class="inline" for="rememberMe">
Намайг сана?</label>
</div>
<div style="text-align:center;margin-top:5px;">
<input type="submit" value="Нэвтрэх" />
</div>
<%} %>
</div>
03Cp> Por que returnurl retorna null?u003C/
03Cp> O que está acontecendo?u003C/
03Cp> u003Cstrong>EDITARu003C/strong>u003C/
03Cp> Obrigado Tim Roberts.u003C/
03Cp> Último código correto é aqui >>u003C/
<% using (Html.BeginForm("Logon", "Account",new { ReturnUrl = HttpContext.Current.Request.QueryString["returnUrl"]} FormMethod.Post)){ %>
Solução
03Cp> Como você está implementando seu próprio mecanismo de login, você precisará garantir que o parâmetro retressurl seja passado quando o usuário clica no botão de envio. Uma maneira de fazer isso é usar uma sobrecarga do método BeginForm
:u003C/
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<div style="text-align: left; width:150px;margin-top:20px;">
<% using (Html.BeginForm("Logon", "Account", new { ReturnUrl = HttpContext.Current.Request.RawUrl }, FormMethod.Post))
{ %>
... as before
<% } %>
</div>
03Cp> O que deve passar o URL junto na seqüência de consulta e, em seguida, vinculá-lo ao parâmetro retressurl do método de ação. Espero que isto ajude.u003C/