2015-04-20 2 views
0

Так вот ситуация, у меня есть loginpartial.cshtml, который я положил на странице с RenderAction2 формы в 1 с видом на 1 контроллер

это loginpartial содержит IsAuthenticated, где если пользователь не аутентификацию его показывает регистрационную форму.

Во-вторых, у меня есть страница управления, которая содержит некоторые поля, такие как имя и т. Д. Когда я нажимаю кнопку сохранения, она сохраняет ее в базе данных. Тем не менее, форма входа также вызывается, и я понятия не имею, почему.

layout.cshtml:

@{Html.RenderAction("Login", "User");} 

LoginPartial.cshtml:

<div class="nav navbar-nav navbar-right"> 
    @if (User.Identity.IsAuthenticated) 
    { 
     <div>No login</div> 
    } 
    else 
    { 
     using (Html.BeginForm("Login", "User", FormMethod.Post)) 
     { 

     @Html.AntiForgeryToken(); 
     @Html.ValidationSummary(true, "Login failed.") 

     <div class="Login"> 
       //fields here 
     </div> 

     } 
    } 
</div> 

UserController Логин:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Login(User user) 
    { 
     if (ModelState.IsValid) 
     { 
      if (isValid(user.Email, user.Password)) 
      { 
       using (MVCV2DbContext MVCV2DbContext = new MVCV2DbContext()) 
       { 
        var users = MVCV2DbContext.Users.Single(u => u.Email == user.Email); 


        FormsAuthentication.SetAuthCookie(users.ID.ToString(), false); 
        //FormsAuthentication.SetAuthCookie(user.Email, false); 
       } 

       return RedirectToAction("Index", "User"); 
      } 

     } 

     return View(user); 
    } 

manage.cshtml:

using (Html.BeginForm("Manage", "User", FormMethod.Post)) 
{ 
    @Html.AntiForgeryToken(); 
    @Html.ValidationSummary(true, "Not all good") 
    <div> 
     //fields here 
    </div> 
} 

UserController управления:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Manage(User_Details users) 
    { 
     if (ModelState.IsValid) 
     { 
      int U_ID = Convert.ToInt32(GetUserIDFromCookie()); 

      using (MVCV2DbContext MVCV2DbContext = new MVCV2DbContext()) 
      { 
       var user = MVCV2DbContext.User_Details.SingleOrDefault(u => u.User_ID == U_ID); 

       if (user != null) 
       { 
        user.User_FirstName = users.User_FirstName; 
        user.User_Insertions = users.User_Insertions; 
        user.User_LastName = users.User_LastName; 

        MVCV2DbContext.SaveChanges(); 
       } 

      } 
     } 
     return View(); 
    } 
+1

Можете ли вы опубликовать сгенерированный HTML? – Ewan

+0

no wait i see it – Ewan

ответ

0
@{Html.RenderAction("Login", "User");} 

в файле макета

будет вызывать метод действия, когда-либо вид визуализируется

вы можете обойти эту проблему путем перемещения

if(User.Identity.IsAuthenticated) ... don't run auth code 

вне поля зрения и в макете vi РЭБ, или контроллер (с соответствующими изменениями в тесте IsAuthenticated)

+0

При добавлении метода IsAuthenticated к контроллеру он генерирует исключение System.InsufficientExecutionStackException, так что тоже не будет работать, я думаю, что мне нужно вывести его из частичного представления, но тогда у меня возникнут некоторые проблемы с пользовательской моделью, которую я использую для входа в систему – Vincentw

0

Вместо if(User.Identity.IsAuthenticated) попробовать Request.IsAuthenticated

Кроме того, что ваша отладка говорит?

+0

Отладка отключается на функции if (isValid (user.Email, user.Password), чтобы проверить, разрешено ли пользователю войти в систему. Также перед формой входа появляется запрос .IsAuthenticated. Это генерирует остальную часть меню, если пользователь вошел в систему. – Vincentw

Смежные вопросы