2013-04-06 132 views
0

我试图以某种方式追加评论系统中ajax文章的结果。 我尝试了很多不同的方式,但他们似乎都以某种方式失败。附加到DOM

的意见的HTML是:

@using (Html.BeginForm()) 
{ 
    <ul class="commentList"> 
    @foreach (var comment in Model) 
    { 
     <li> 
      <a href="http://www.google.com"><img src='@Url.Content("~/Images/User.png")' alt="User" /></a> 
      <div class="commentBody"> 
       <a href="http://www.google.com">@comment.UserName </a> 
       <span>@comment.CommentText </span> 
       <div> 
        <abbr title='@comment.CommentDate '>@comment.CommentDate.ToString("dd. MMMM HH:mm")</abbr> 
        <a href="#" class="likar">Like</a> 
       </div> 
      </div> 
     </li> 
    } 
     <li class="commentAdd"> 
      <textarea id="CommentText" name="CommentText" rows="3" cols="20"></textarea> 
      <label> 
       <input type="submit" value="Write comment" /> 
      </label> 
      @Html.ValidationMessage("CommentText") 
     </li> 
    </ul> 
} 

这里是我的脚本:

$('input[type="submit"]').click(function(event){ 

    // Prevent the default behaviour. 
    event.preventDefault(); 
    var form = $(this).parent(); 
    var PostComment = { "comment": $("#CommentText").val() }; 
    $.ajax({ 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     url: "/Home/AddComment/", 
     data: JSON.stringify(PostComment), 
     dataType: "json", 
     success: function (data) { 
      var commentEntry = $('<li/>'); 
      commentEntry.append('<a href="http://www.ru.is"><img src=\'@Url.Content("~/Images/User.png")\' alt="User" /></a>'); 
      var diver = $('<div/>').addClass('commentBody'); 
      diver.append('<a href="http://www.google.com">').text(data.name).append('</a>'); 
      diver.append($('<span/>').text(data.comment)); 
      var diver2 = $('<div/>'); 
      diver2.append('<abbr title=\' '); 
      diver2.append().text(data.timeOf); 
      diver2.append('\'>'); 
      diver2.append().text(data.timeOf); 
      diver2.append('</abbr><a href="#" class="likar">Like</a>'); 
      diver.append(diver2); 
      commentEntry.append(diver); 
      $(".commentAdd").before(commentEntry); 
      // reset the form. 
      form[0].reset(); 

     }, 
     error: function (xhr, err) { 
      // Note: just for debugging purposes! 
      alert("readyState: " + xhr.readyState + 
      "\nstatus: " + xhr.status); 
      alert("responseText: " + xhr.responseText); 
     } 
    }); 
}); 

PostComment类是这样的:

public class PostComment 
{ 
    public string comment { get; set; } 
    public string name { get; set; } 
    public string timeOf { get; set; } 
} 

是这样设置的时间在HomeController中 - AddComment

c.timeOf = DateTime.Now.ToString("yyyy-dd-MM HH:mm:ss"); 

其中c是PostComment类的实例。

我根本无法得到正确的追加方法。如果我像这样使用它,那么我的appen date.name行不会将“a href”元素添加到DOM。 任何想法?因为我已经尝试了我所能做到的并且没有想法。

+0

'/ Home/AddComment /'你的控制器动作的代码是什么?它是否返回一个JsonResult? – Snixtor 2013-04-06 23:12:07

回答

1

你不能按照你的方式使用.append()。您可以附加唯一完整的元素,不关闭标签:

你可以尝试这样的:

success: function(data) { 

    var diver2 = $('<div>') 
     .append($('<abbr>').attr('title', data.timeOf)) 
     .append('<a href="#" class="likar">Like</a>'); 

    var diver = $('<div>').addClass('commentBody') 
     .append('<a href="http://www.google.com">' + data.name + '</a>') 
     .append($('<span>').text(data.comment)) 
     .append(diver2); 

    var commentEntry = $('<li>') 
     .append('<a href="http://www.ru.is"><img src=\'@Url.Content("~/Images/User.png")\' alt="User" /></a>') 
     .append(diver); 

    $('.commentAdd').before(commentEntry); 

    // reset the form. 
    form[0].reset(); 
} 

注意使用.attr()方法来设置<abbr>元素的“title”属性。

+0

几分钟前我想到了这个......最后。现在至少如果别人有同样的问题,他可以看到这个解释,谢谢。 – Mappan 2013-04-07 00:13:27