- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发“ASP.NET MVC 4”应用程序。我正在使用/学习 SimpleMembershipProvider 并尝试坚持 VS2012
使用 Internet 模板
创建的默认逻辑(如果我没记错的话,是带有“SimpleMembershipProvider”的逻辑)盒子外面)。
我被困在 AccountController
中,我无法弄清楚如何使用此方法:
private ActionResult RedirectToLocal(string returnUrl)
{
if (Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
据我了解,整个想法是重定向到您决定登录的位置(正是我想要完成的任务)。我看了一下它在 View 中的使用方式:
@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl }))
寻找一个实际上ViewBag.ReturnUrl
设置了一些值的地方,我只在这里得到了这个方法:
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
我对如何准确地获取位置/网址感到非常困惑。我设置了一些断点,但我从未见过 returnUrl
与 null
不同,在这种情况下,这对我来说似乎很合乎逻辑,因为它在任何地方都没有值(value)(除非我当然会错过一些东西)。
所以我真的不明白这是如何工作的。我发布上述内容只是为了表明我尝试做作业,我尽可能多地进行调查,但没有找到答案,所以我在这里问。您能否提供有关其实际工作原理的解释/示例?
最佳答案
当使用表单例份验证并且用户未经过身份验证或授权时,ASP.NET 安全管道将重定向到登录页面,并在查询字符串中作为参数传递 returnUrl 等于所要访问的页面重定向到登录页面。登录操作获取此参数的值并将其放入 ViewBag 中,以便可以将其传递给 View。
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
然后 View 将这个值存储在 View 中这行代码所示的表单中。
@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl }))
它存储在 View 中的原因是,当用户在输入用户名和密码后执行提交时,处理回发的 Controller 操作将有权访问该值。
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
return RedirectToLocal(returnUrl);
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);
}
如果模型状态有效,并且通过调用 WebSecurity.Login 方法对其进行身份验证,则它会使用 returnUrl 值调用方法 RedirectToLocal em> 来自 View ,最初来自创建 View 的登录操作。
如果用户没有像在默认布局中单击页面顶部的登录链接那样被重定向到登录页面,则 returnUrl 值将为 null。在这种情况下,用户登录成功后将被重定向到主页。 returnUrl 的全部目的是自动将用户发送回他们在经过身份验证/授权之前尝试访问的页面。
关于asp.net-mvc-4 - 我应该如何在 MVC 4 中使用 ReturnUrl = ViewBag.ReturnUrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20123612/
我需要将一些信息传递给部分 cshtml View 。为此,我使用了 ViewDataDictionary 和 ViewBag。 public ActionResult TaskPage(int ID
我有 RedirectToAction 作为 Controller 中的返回值,在我看来我使用 ViewBag。虽然在 RedirectToAction 之后 ViewBag 变空是一个众所周知的问题
我已经为 HtmlHelper 编写了扩展方法,该方法是从需要访问 ViewBag 以获取页面设置的信息的母版页调用的。 这是方法签名: public static string BuildFavor
我正在尝试在我的应用程序中使用 ViewBag,我拥有所有最近的 dll、最新版本的 MVC 3,但我仍然收到错误: "The name 'ViewBag' does not exist in the
我正在尝试通过 JavaScript 将 ViewBag 中的值插入到输入中并动态创建该值。 我调用 Controller 创建的employeeID的值 public string GetEmplo
我需要显示存储在 ViewBag 中的日期,为此我需要使用 DisplayTemplate。现在,如果它是模型中的日期,我会使用 DisplayFor 助手,但我该如何为 ViewBag 做呢? 我有
我知道网上已经有一些解决方案,但在尝试了所有解决方案后,我对自己感到困惑。 我只想澄清我尝试过的解决方案: 确保 Microsoft.AspNet.Web.Optimization 或 System.
在MSDN documentation ,有 ViewBag.MyMessageToUsers 和 ViewBag.AnswerText。在ASP.net/mvc tutorial , 有 ViewB
这个问题在这里已经有了答案: Can the ViewBag name be the same as the Model property name in a DropDownList? (2 个答
我测试了我的应用程序,在测试时我发现了一个错误,我认为它来自 ViewBage。我有 500 名医生和专科医生的名单,当我想编辑电话、地址等时,下拉菜单会显示列表中第一个专科医生的名字,所以它不会保存
我有一个在数据库中注册聊天的表单,一切正常,问题是 ViewBag,因为这会将消息带到 View 中的 Javascript,以便它可以进行验证。当用户注册时,应该会出现一条成功消息,但在 ViewB
有没有办法清除ViewBag? ViewBag 没有 setter,因此不能简单地取消它: ViewBag = null; 我似乎也不能use reflection迭代它并清除它的动态属性,因为您不能
想象一个名为的 View 包 ViewBag.Modes 这包含以下内容: Simple Advanced Manual Complete 如何像在数组中那样通过索引访问 viewbag? 例如 S
是否可以在调用重定向之前设置 ViewBag? 我想要这样的东西: @ViewBag.Message="MyMessage"; RedirectToAction("MyAction"); 最佳答案 当
我正在做一个项目,我只需要从两个表中获取数据,我想使用 LINQ Query 来获取数据。 在我的 Controller 中: var Parameters = (from test in _db.t
与'12 asp.net C# MVC4 - Int.Appl.Template EF Code First 这是我非常简单的脚本 $('#Add').click(function (e)
这是我的 Controller 代码: const string template = "clm_adj_process_cd ('@[CdCode]',varchar) ~f.src_dm_plat
我在 MVC3 项目中有一个 View ,在加载时我将一个实体设置到 ViewBag 中。 实体的属性之一是 Datetime? 类型。 在 $(document).ready我将 ViewBag 中
我尝试将 ViewBag.OrderId 设置为数据属性 data-orderId 的值,但在 =Add } JS: $(".btn-add-note").click(function(){
我需要显示存储在 ViewBag 中的日期,并且我需要使用 DisplayTemplate 来实现此目的。现在,如果它是模型中的日期,我将使用 DisplayFor 助手,但我该如何为 ViewBag
我是一名优秀的程序员,十分优秀!