子控制器/部分请求和表单操作方法

时间:2009-11-23 19:08:23

标签: asp.net-mvc partial subcontroller

我需要做的是以下

  1. 设置小型登录表单(或任何 局部视图)
  2. 完成登录 行动
  3. 回到相同的位置 地方(控制器/行动)用户是 在单击“登录按钮”之前
  4. 任何部分请求/子控制器,RenderAction解决方案都提供此功能,而无需任何额外代码来处理父页面URL?

1 个答案:

答案 0 :(得分:0)

您可以尝试以下方法:

  1. 创建一个新用户MVC用户控件(Login.ascx),您可以在其中设置登录表单:

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
    <% using (Html.BeginForm("authenticate", "login")) { %>
        <%= Html.Hidden("returnurl", Request.Url.ToString()) %>
        <div>
            <label for="username">Username</label>
            <%= Html.TextBox("username") %>
        </div>
        <div>
            <label for="password">Password</label>
            <%= Html.TextBox("password") %>
        </div>
        <input type="submit" value="Login" />
    <% } %>
    
  2. 在某个视图页面中包含此部分:

    <% if (!User.Identity.IsAuthenticated) { %>
        <% Html.RenderPartial("~/Views/Home/Login.ascx"); %>
    <% } else { %>
        Welcome <%= Html.Encode(User.Identity.Name) %>
    <%} %>
    
  3. 在您的登录控制器中验证用户名和密码,如果验证成功,则重定向到returnUrl:

    public class LoginController : Controller
    {
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Authenticate(string username, string password, string returnurl)
        {
            // TODO: Perform authentication, set cookies,
            // verify that returnurl belongs to your site, etc...
            return Redirect(returnurl);
        }
    }