我看到AccountController.cs中  [HttpPost]
        public ActionResult LogOn(LogOnModel model, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                if (Membership.ValidateUser(model.UserName, model.Password))
                {
                    FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                    if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                        && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
                    {
                        return Redirect(returnUrl);
                    }
                    else
                    {
                        return RedirectToAction("Index", "Home");
                    }
                }
                else
                {
                    ModelState.AddModelError("", "提供的用户名或密码不正确。");
                }
            }            // 如果我们进行到这一步时某个地方出错,则重新显示表单
            return View(model);
        }
方法中,参数有2个LogOnModel model, string returnUrl
可我在@model MvcApplication1.Models.LogOnModel@{
    ViewBag.Title = "登录";
}<h2>登录</h2>
<p>
    请输入用户名和密码。如果您没有帐户,请 @Html.ActionLink("注册", "Register")。
</p><script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>@Html.ValidationSummary(true, "登录不成功。请更正错误并重试。")@using (Html.BeginForm()) {
    <div>
        <fieldset>
            <legend>帐户信息</legend>            <div class="editor-label">
                @Html.LabelFor(m => m.UserName)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(m => m.UserName)
                @Html.ValidationMessageFor(m => m.UserName)
            </div>            <div class="editor-label">
                @Html.LabelFor(m => m.Password)
            </div>
            <div class="editor-field">
                @Html.PasswordFor(m => m.Password)
                @Html.ValidationMessageFor(m => m.Password)
            </div>            <div class="editor-label">
                @Html.CheckBoxFor(m => m.RememberMe)
                @Html.LabelFor(m => m.RememberMe)
            </div>            <p>
                <input type="submit" value="登录" />
            </p>
        </fieldset>
    </div>
}
他的string returnUrl取到的是什么值????我不解

解决方案 »

  1.   

    经过调试发现这个returnUrl是null.
    以下是stackoverflow大牛给出的解答
    Html.BeginForm("LogOn", "Account", new {ReturnUrl = Request.QueryString["ReturnUrl"] })
      

  2.   

    controller会尝试从querystring、postdata和router data中获得参数。
      

  3.   

     Account/LogOn?returnurl=/home/index这样
      

  4.   

    由<input type="submit" value="登录" />,提交,4楼是什么情况?
      

  5.   

    这个参数是经常需要用到的,比如你不访问登陆页面,直接访问其他页面。
    其他页面验证是否登陆,没登陆则跳转Account/LogOn?returnurl=xxx
    这个时候这个参数就有作用了,你登陆之后就直接跳转到该页面