2013-11-15 2 views
0

У меня есть представление, которое отлично работает до тех пор, пока я не добавлю атрибут Authorize в действие Create в диспетчере продуктов в областях Admin.Авторизовать атрибут в форме возврата ASP.NET MVC без тега формы

[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" })) 
    { 
     ............... 
     ............. 
} 

Моя проблема, когда я нажимаю на кнопку Сохранить перенаправляет на другой URL, как администратора/Home, которая не существует. И тег формы тоже отсутствует. Что мне здесь не хватает?

Отредактировано: Кажется, что после успешного входа в систему имя пользователя для входа в систему отображает форму, которая создает беспорядок с моей формой продукта.

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

Любая идея или обратной связи было бы здорово

ответ

1

я бы ожидал увидеть [Авторизоваться (Роли = «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 не возвращает то, что [Авторизоваться()] ожидает. Я бы посоветовал вам посмотреть на секции входа в системе и убедитесь, что вы настраиваете пользователь, как регистрируются и, и что он/она имеет роль разрешает зацепиться

Надеются, что это помогает

+0

Я не использую роль провайдера вообще. У меня есть анонимность и аутентификация пользователя. когда я открываю/Admin/Product/Создает его перенаправление на учетную запись/вход в систему, как ожидалось. После успешного входа в систему он перенаправляет обратно в/Admin/Product/Create. Который кажется прекрасным. Но когда я отправляю сообщение с помощью кнопки сохранения, это работает. поскольку он перенаправляется в другое место, потому что у моей страницы нет тега формы. – Miller

+0

Отделяете ли вы свои методы с атрибутами [httpget] и [httppost] и разными сигнатурами, чтобы ваша маршрутизация знала, куда положить httppost? Возможно, вам нужно предоставить другую подпись и украсить сообщение с помощью [httppost], а затем установить точку останова в атрибуте, чтобы вы могли доказать, что маршрутизация отправляет вас в нужное место. –

+0

Да, я уже установил [ httppost]. но в представлении не отображается тег формы после добавления атрибута Authorize. Он отлично работает без разрешения авторизации – Miller