日期:2014-05-18  浏览次数:20477 次

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;