0

私はこれに不慣れで、それがどのように機能しなければならないのか分かりません。

foreach私のビューには、そのニュース記事のすべてのニュースコメントを一覧表示する部分的なビューがあります。

postユーザーがこのニュース記事にさらにコメントを送信できるボタンのあるテキストエリアがあります。

新しいニュース記事は、を実行せずにリストに追加する必要がありますlocation.reload。私は使用するように言われましたがAJAX、ではありませんJSON

これが私のコントローラーです:

[HttpGet]
[NoCache]
public ActionResult SetCommentOnNews(int newsId, string newsComment) ??
{
  var currentUser = ZincService.GetUserForId(CurrentUser.UserId);
  ZincService.NewsService.SetCommentOnNews(newsId, newsComment, currentUser.UserId);
  return Json(new { success = true }, JsonRequestBehavior.AllowGet); ??
}


 <div class="news-comment-content" id="news-comment-content">
      <%  if (Model.Results != null) { 
         foreach (var newsItem in Model.Results.NewsComments) %>
      <% {  %>   
         <% Html.RenderPartial("~/Views/Home/SetCommentOnNews.ascx", newsItem); %>
      <% }  %>
 </div>

私の部分:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Zinc.Web.Areas.News.ViewModels.Home.NewsCommentsViewModel>" %> //this also not right

<div class="news-post-list-item">
  <div class="news-post-user-info-wrapper">
    <div class="avatar">
       <img width="52" height="52" alt="Avatar" src="/ThemeFiles/Base/images/User/user-avatar.png"/> 
    </div>
    <div class="who-and-when-box">
      <%: newsItem.CommentDate %>
      <br />
      <br />
      <%: ViewBag.UserName %>
    </div>        
    <div class="news-comment"><%: newsItem.NewsComment %></div>
    <div class="clear"></div> 
  </div>     
  <div class="clear"></div> 
</div> 

<div class="header">
  <h3>
      Leave a comment 
  </h3>
</div>
<div>  
  <textarea id="textareaforreply" rows="3" cols="160"></textarea>
</div>
<div>
  <a href="javascript:PostNewsComment(<%: Model.News.NewsId %>);" class="button" id="post_button">Post</a>     
</div>

 <script type="text/javascript">
 function PostNewsComment(newsId) {
   $("post-button").click(function () {
       var jqxhr = $.getJSON("<%= //Url.Action("SetCommentOnNews", "Home", new { area = "News" }) %>?newsId=" + newsId + "&newsComment=" + $("#textareaforreply").text(), function (data) {
     if (data.success) {
       alert($("#textareaforreply").text());
       $('#news-comment').append($("#textareaforreply").text());
     }
   });
 }
</script>

上記のJSは私が持っているものであり、?HTMLを使用してリストに挿入する必要があります。AJAX私はこれを行う方法がわかりません。誰か助けてもらえますか?

ありがとう

4

1 に答える 1

0

AJAX を使用して HTML をリストに挿入するには、部分ビューの代わりにテンプレートで Knockoutjs を使用します。ノックアウトを使用して、ブラウザで情報をレンダリングできます。ビューはサーバー側をレンダリングするためのものであり、AJAX とうまく連携しません。

「JSON ではなく AJAX を使用するように言われた」とはどういう意味ですか。AJAX は、ネットワーク経由で送信されるデータをシリアル化する方法として JSON を使用します。JQuery メソッドのajaxと getJSONについて言及していますか? getJSONは、HTTP GET 動詞を使用して JSON を取得するように特に構成するajaxメソッドの単なるラッパーです。どちらでも問題なく動作しますが、ajax を使用すると、リクエストの構成をより詳細に制御できます。

于 2012-12-21T14:15:43.180 に答える