2012-01-28 22 views
0

私はLinqからSqlにjqueryとajaxを通してデータベースから結果を取得するためにasp.net MVC Webアプリケーションを開発しています。私のモデルは、コードLinq to SQL複数の列を取得

public IEnumerable<string> getComments(long problemID) 
     { 

      var comment = from c in _objectModel.Comments 
          where c.ProblemID == problemID 
          select new { c.EmpID, c.CommentText, c.Time }.ToString(); 

      return comment; 

     } 

を以下ましたし、私のコントローラは、コード

public string GetComments(string problemid) 
     { 
      List<string> collection = _discussionRepository.getComments(Convert.ToInt32(problemid)).ToList(); 
      string comments = null; 
      foreach (string item in collection) 
      { 
       comments += item + "\n"; 

      } 

      return comments; 



     } 

に従い、私の見解では

$("#btnPostComment").click(function() { 
    var strdata = { 
      problemID: $("#problemID").val(), 
      commentText: $("#_1").val(), 
      empID: $("#empID").val(), 
      agree: 0, 
      disagree: 0 
     }; 
     $.ajax({ 
      type: "POST", 
      url: "<%= Url.Action("PostComment", "Discussion") %>", 
      data: strdata, 
    error: function(msg){ 
       alert("error" + msg); 
      }, 
      success: function (msg) { 
       var id = { problemid : $("#problemID").val()}; 
       $.ajax({ 
        type: "GET", 
        url: "<%= Url.Action("GetComments", "Discussion") %>", 
        data: id, 
        error: function(msg){ 
         alert("error2" + msg); 
        }, 
        success: function (msg) { 

         $("#commentdiv").html(msg); 
        } 
        }); 


      } 
     }); 

が含まれていると私は私のASPページ

に次のような結果を取得していました

{EmpID = 1、CommentText = sss、Time = 1/27/2012 2:20:49 AM} {EmpID = 1、 CommentText = aaa、Time = 1/27/2012 2:46:07 AM} {EmpID = 1、CommentText = aaa、Time = 1/27/2012 2:50:23 AM} {EmpID = 1、CommentText = Munazza、時刻= 1/27/2012 2:58:29 AM} {EmpID = 1、CommentText = Jawad、Time = 1/27/2012 3:00:51 AM} {EmpID = 1、CommentText = xx、Time = 1/28/2012 11:56:59 AM} {EmpID = 1、CommentText = ss、Time = 1/28/2012 12:35:00 PM}

私は中かっこなしでプロパティを持たない結果、つまり1 SS 2012年1月27日

よろしく

答えて

3

問題は、匿名型のToStringを呼んでいるということです。既存のCommentモデルクラスに多量のデータが含まれていますか?ない場合は、あなただけ使用することができます。

public List<Comment> GetComments(long problemID) 
{ 
    return _objectModel.Comments.Where(c => c.ProblemID == problemID) 
           .ToList(); // Force evaluation 
} 

その後、Javascriptが理解できたAJAXにこのList<Comment>を変換するために、あなたのコントローラを変更すると思います。

あなたはが本当にが唯一のプロパティのない文字列をしたい場合は、あなただけにあなたの元のコードを変更することができます:あなたはString.JoinまたはStringBuilderを使用するか、あなたのコントローラのコードを変更するすべき

public IEnumerable<string> GetComments(long problemID) 
{ 
    var query = from c in _objectModel.Comments 
       where c.ProblemID == problemID 
       select new { c.EmpID, c.CommentText, c.Time }; 

    return query.AsEnumerable() // Do the rest locally 
       .Select(c => string.Format("{0} {1} {2"}, c.EmpID, 
              c.CommentText, c.Time)); 
} 

- そうでないと文字列の連結が繰り返されるため、O(n )の問題が発生する可能性があります。

+0

文字列をビューに送信するコントローラのコードを教えてください – Snake

+1

@Snake:Pass、私は恐れています - 私はASP.NET MVCを行っていません。おそらくあなたは実際には*直接ビューではなく、AJAX呼び出しを介して利用可能にしています。現在、あなたの頭を少し上回っているように感じられます。これらの技術はどれだけ新しいものですか?私は一度に*一つの*新しい事を学ぼうと試みるのが一番うまくいくのが分かります。 –

0

クライアント側のコードを見ると、 ajax呼び出しからフォーマットされたhtmlを調べることができますが、単にToStringをreturingしているだけです(Jon Skeetの説明)。

これがあなたの意図なら、文字列を有効なHTMLにフォーマットする必要がありますが、json形式でデータを返し、HTMLクライアント側に変換する方がよいでしょう。

+0

私は、MVCの全体的な考え方は別個の懸念事項であると付け加えるべきです。したがって、データをユーザーに提示することは、ビューの関心事です。したがって、実際にコントローラから書式設定されたHTMLを返すべきではありません。 –