2015-02-16 2 views
-1

У меня есть окно входа (в Views/Shared/_Login.cshtml) на всех моих страницах, загружаемых через _Layout.cshtml в @ Html.partial form. Кроме того, действие индекса контроллера Home получает все комментарии из базы данных и перечисляет их в Index View. Когда я ввожу неверное имя пользователя или пароль, логин cotroller возвращает сообщение об ошибке, поскольку имя пользователя или пароль неверны. но проблема в том, что после этого действие индекса не вызывается, и ни один из комментариев не появляется. часть _Layout.cshtml:Когда modelstate получает ошибку, ящик входа в макет не отображает действие индекса домашнего контроллера

<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="refresh" /> 
<title>@ViewBag.Title</title> 
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet"  type="text/css" /> 
<script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"></script> 
</head> 
<body> 
<div id="login_box" >  
@Html.Partial("_Login",new CSS_Test.ViewModels.CommentViewModel())      
</div> 
<div id="first_head"> 
<span class="times"> @{Html.RenderAction("TimeSummary","Home");}</span> 
</div> 

часть _login.cshtml файла (это слишком долго)

@model CSS_Test.ViewModels.CommentViewModel  
<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> 
@using (Ajax.BeginForm("_LogIn", "Account", new AjaxOptions { UpdateTargetId = "log" })) 
{ 
    if (@Session["UserName"]==null) 
    { 
    @Html.TextBoxFor(m =>this.Model.LogModel.UserName, new { @class="UserName", placeholder = "نام کاربری" ,autofocus="autofocus",@Autocomplete= "off"})  
    <script type="text/javascript">$(function() { 
    window.onload = $("input.UserName").val("0"); 
    window.onload = $("input.Password").val(""); 
    }) 
</script>    
    <br /> 
     @Html.ValidationMessageFor(m => this.Model.LogModel.UserName)  
    <BR /> 

мой _Login действие контроллера счета:

public ActionResult _LogIn(CSS_Test.ViewModels.CommentViewModel model, string returnUrl) 
    { 
     if (ModelState.IsValid) 
     { 
      if (Membership.ValidateUser(model.LogModel.UserName, model.LogModel.Password)) 
      { 
    FormsAuthentication.SetAuthCookie(model.LogModel.UserName, model.LogModel.RememberMe); 
    if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") 
        && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\")) 
       { 
        return Redirect(returnUrl); 
       } 
       ViewBag.Mess=model.LogModel.UserName+" خوش آمدید"; 
       @Session["UserName"] = model.LogModel.UserName;    
       return View(model); 
      } 
      ViewData.ModelState.AddModelError("Error", "نام کاربری یا رمز عبور اشتباه است"); 
       } 
     return View(model); 
    } 

Индекс действия Домашняя страница контроллер:

public ActionResult Index() 
    {    
     MyContext mydb =new MyContext("MyContext"); 
      var All_Comments = mydb.Comments.ToList<Comment>(); 

      CommentViewModel mymodel = new CommentViewModel() 
      { 
       all_comments=All_Comments 
      }; 
     return View(mymodel);   
      } 

Пожалуйста, расскажите мне, как я могу перенаправить действие индекса после отправки сообщения о возврате модели состояния, чтобы на странице индекса отображалось как сообщение об ошибке, так и комментарии. Надеемся передать мою проблему. Примите любую помощь.

ответ

0

Ok. Я нашел свой ответ. Самый лучший способ - опубликовать форму в _Login.cshtml через действие $ .ajax to _Login. Это добавлен скрипт в _Login.cshtml

<script> 
$(document).ready(function() { 
    $("#submit").click(function() {   
     $.ajax({ 
      type: "Post", 
      url: "Account/_Login", 
      data: $("#all_form").serialize(), 
      error: function (xhr, status, error) { 
       alert("Error,Something went wrong"); 
      }, 
      success: function (data) { 
       if (data.Err_message != null) 
        $("#invalid_user").html(data.Err_message); 
       else 
       { 
        window.location.href = "Admin/Index"; 
       } 
      } 

     }) 

    }); 

}); 
</script> 
@using (Html.BeginForm(null,null,FormMethod.Post,new{id="all_form"})) 
{ 
... 
<div style="color:#f00;font-weight:bold" id="invalid_user"></div> 
... 
    <input type="button" value="submit" id="submit"/> 
} 

// и это измененное действие _Login

[HttpPost] 
    public ActionResult _LogIn(CSS_Test.ViewModels.CommentViewModel model, string returnUrl) 
    { 
Json_Res result = new Json_Res(); 
if (ModelState.IsValid) 
{ 
if (Membership.ValidateUser(model.LogModel.UserName, model.LogModel.Password)) 
{ 
FormsAuthentication.SetAuthCookie(model.LogModel.UserName, model.LogModel.RememberMe); 
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") 
    && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\")) 
{ 
        return Redirect(returnUrl); 
       } 

       @Session["UserName"] = model.LogModel.UserName; 
       result.Comment_VM = model; 
      } 
      else 
      { 
       result.Err_message = "Invalid Username or password"; 
          } 
     } 

     return Json(result,JsonRequestBehavior.AllowGet); 
    } 

// и это класс Json_res ViewModel

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using CSS_Test.Models; 

namespace CSS_Test.ViewModels 
{ 
public class Json_Res 
{ 
    public string Err_message { get; set; } 
    public CommentViewModel Comment_VM { get; set; } 
} 
}