在没有表单标签的ASP.net MVC返回表单上授权属性

时间:2013-11-15 08:01:23

标签: asp.net-mvc-4 authorize-attribute

我认为工作正常,直到我在Admin区域的productcontroller的Create操作中添加了Authorize属性。

[Authorize]
public ActionResult Create()
{
ViewBag.Action = "Create";
VewBag.Category = new SelectList(this.categoryCoreModel.Categories, "CategoriaKy", "CategoriaDescIT");
ViewBag.SubCategory = new SelectList(this.subCategoryCoreModel.SubCategories, "CategoriaSubKy", "CategoriaSubDescIT");
return this.View("Create", new ProductEditModel ());
}

在我看来

<div class="form">
    @using (Html.BeginForm((string)ViewBag.Action, "Product", FormMethod.Post, new { Model, enctype = "multipart/form-data" }))
    {
         ...............
         .............
 }

我的问题是当我点击“保存”按钮时,它会重定向到另一个不存在的Admin / Home网址。并且Form标签也丢失了。我在这里失踪了什么?

编辑: 成功登录后,loginpartial视图呈现的表单似乎使我的产品表单变得混乱。

  @(Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm" })) {
            @Html.AntiForgeryToken()
            <a href="javascript:document.getElementById('logoutForm').submit()">Log off</a>
        }

任何想法或反馈都会很棒

1 个答案:

答案 0 :(得分:1)

我原本希望看到[Authorize(Roles =“SomeRoleName”)],以便您的授权可以证明用户具有该角色,因为您没有指定角色(并且您可能实际上没有登录)将您重定向到角色提供程序指定的位置,即loginUrl

您是否正在使用SimpleRoleProvider?

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
  <providers>
    <clear />
    <add name="SimpleRoleProvider" type="Models.SimpleRoleProvider, Models, Version=1.0.0.0, Culture=neutral" />
  </providers>
</roleManager>

如果是这样,那么HttpContext.User.Identity和/或HttpContext.User.IsInRole不会返回[Authorize()]所期望的内容。我建议你查看登录部分并确保将用户设置为已记录,并确保他/她具有授权锁定的角色

希望这有帮助