asp.net mvc3中IE的AJAX的有关问题
asp.net mvc3中IE的AJAX的问题
我按照网上的一些例子,做了一个无刷添加评论的例子,但是在IE下添加评论的时候遇到一个问题。
先说说我是怎么做的:
具体的文章面页的代码:
意思就是如果这条评论是可以评论的,那就显示一个可点击的接击,点击链接后将当前文章ID传给这个AddComment,并将这个AddComment这个VIEW加载到当前页面。
View AddComment 中的代码:
CreateComment是具体添加评论的VIEW.
代码如下:
因为我想实现如果用户没有登陆,就不让它提交评论,而我采用的方法是在这个CreateComment VIEW中来判断,如果己登 陆则显示评论的提交按钮,否则就不显示按钮。
问题1:,在IE9中,不管用户是否是己登陆,这个提交按钮都是隐藏的,就是一直显示"您还没有登陆,请 @Html.ActionLink("登陆","Login","Account") 后再评论。"。而在FIREFOX、CHROME中则一切正常。
问题2:在IE9中,第一次评论时可以无刷新显示添加的评论,而第二次评论的内容则只能通过刷新整页来看。在FIREFOX、CHROME中则一切正常。
Comment控制器中代码如下:
我按照网上的一些例子,做了一个无刷添加评论的例子,但是在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