当前位置: 代码迷 >> ASP.NET >> asp.net mvc3中IE的AJAX的有关问题
  详细解决方案

asp.net mvc3中IE的AJAX的有关问题

热度:4595   发布时间:2013-02-25 00:00:00.0
asp.net mvc3中IE的AJAX的问题
我按照网上的一些例子,做了一个无刷添加评论的例子,但是在IE下添加评论的时候遇到一个问题。
先说说我是怎么做的:

具体的文章面页的代码:
C# code
@if (Model.IsComment == true)                  {                    <div id="ajaxcomment">                        @{Html.RenderAction("AddComment", "Comment", new { ArticleID = Model.ArticleID });}                    </div>                  }                  else                  {                    <div class="gfx_comment"><a id="comment"></a>                    <div class="gfx_comment_ul1"><p class="blink b">该评论己关闭</p></div>                    </div>                  }

意思就是如果这条评论是可以评论的,那就显示一个可点击的接击,点击链接后将当前文章ID传给这个AddComment,并将这个AddComment这个VIEW加载到当前页面。

View AddComment 中的代码:
C# code
@model IEnumerable<Blog.Models.Comment>@{    var comlist = ViewBag.Comment; }    <h2>            @Ajax.ActionLink("添加评论", "CreateComment", new { articleid = ViewBag.articleid }, new AjaxOptions { UpdateTargetId = "AddComments" })    </h2>    <div id="AddComments"></div>


CreateComment是具体添加评论的VIEW.
代码如下:

C# code
@model Blog.Models.Comment@{    ViewBag.Title = "CreateComment";}<script src="@Url.Content("~/Template/Js/jquery.validate.min.js")" type="text/javascript"></script><script src="@Url.Content("~/Template/Js/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script><script type="text/javascript">    function ReloadComments()     {      $("#ajaxcomment").load('@Url.Content("~/Comment/AddComment?articleid="+ ViewBag.articleid)');     }</script>@using (Ajax.BeginForm(new AjaxOptions { OnComplete = "ReloadComments" })){    @Html.Hidden("articleid", (int)ViewBag.articleid);    @Html.ValidationSummary(true)    <fieldset>        <div class="editor-label">            @Html.LabelFor(model => model.Content)        </div>        <div class="editor-field">            @*@Html.EditorFor(model => model.Content)*@            <textarea name="Content" id="Content" cols="60" rows="8" class="textarea-comment"></textarea>            @Html.ValidationMessageFor(model => model.Content)        </div>        @if (Session["userid"] == null)        {            <p>您还没有登陆,请 @Html.ActionLink("登陆","Login","Account") 后再评论。</p>        }        else        {            <p><input type="submit" value="提交评论" /></p>        }    </fieldset>}

因为我想实现如果用户没有登陆,就不让它提交评论,而我采用的方法是在这个CreateComment VIEW中来判断,如果己登 陆则显示评论的提交按钮,否则就不显示按钮。

问题1:,在IE9中,不管用户是否是己登陆,这个提交按钮都是隐藏的,就是一直显示"您还没有登陆,请 @Html.ActionLink("登陆","Login","Account") 后再评论。"。而在FIREFOX、CHROME中则一切正常。
问题2:在IE9中,第一次评论时可以无刷新显示添加的评论,而第二次评论的内容则只能通过刷新整页来看。在FIREFOX、CHROME中则一切正常。

Comment控制器中代码如下:
C# code
#region 添加评论        public ActionResult AddComment(int articleid)        {            ViewBag.articleid = articleid;            var comments = db.Comments.Include("User").Where(b => b.ArticleID == articleid);            //var comment = db.Comments.Where(m => m.ArticleID == articleid).ToList();            ViewBag.Comment = comments.OrderByDescending(m => m.AddDate);            ViewBag.CommentCount = comments.Count();            return PartialView(comments.ToList());        }        public ActionResult CreateComment(int articleid)        {            ViewBag.articleid = articleid;            return PartialView();        }        [HttpPost]        public ActionResult CreateComment(Comment comment)        {            if (ModelState.IsValid)            {                comment.AddDate = DateTime.Now;                comment.Good = 0;                comment.Bad = 0;                comment.UserID = Convert.ToInt32(Session["userid"]);                comment.AddIP = Request.UserHostAddress;                db.Comments.Add(comment);                db.SaveChanges();            }            ViewBag.articleid = comment.ArticleID;            return PartialView(comment);        }        #endregion
  相关解决方案