2012-01-28 73 views
0

我正在開發一個asp.net MVC web應用程序,其中我使用Linq to Sql通過jquery和ajax從數據庫獲取結果。我的模型下面的代碼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 = 2012年1月27日上午2:20:49} {EmpID = 1, CommentText = aaa,Time = 2012年1月27日上午2:46:07 {EmpID = 1,CommentText = aaa,Time = 2012年1月27日上午2:50:23} {EmpID = 1,CommentText = Munazza,時間= 2012年1月27日上午2:58:29} {EmpID = 1,CommentText = Jawad,時間= 2012年1月27日3:00:51} {EmpID = 1,CommentText = xx,時間= 1/28/2012 11:56:59 AM} {EmpID = 1,CommentText = ss,時間= 2012年1月28日12:35:00}

我想得到沒有大括號和沒有屬性的結果,即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 
} 

你會那麼改變你的控制器,這List<Comment>轉換成AJAX其中的JavaScript能夠理解。

如果你真的只想沒有屬性字符串,你可以只更改原始代碼:

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)); 
} 

你應該改變控制器代碼或者使用String.JoinStringBuilder - 否則你將有一個O(n )問題,由於重複字符串連接...

+0

請告訴我發送字符串到視圖的控制器的代碼 – Snake 2012-01-28 08:07:18

+1

@Snake:通過,我害怕 - 我還沒有做任何ASP.NET MVC。據推測,你並不直接在視圖中查看它,而是通過AJAX調用使其可用。感覺就像你現在可能略微超過你的頭 - 這些技術中有多少對你來說是新的?如果我只嘗試一次學習*一件新事物,我發現它效果最好。 – 2012-01-28 08:12:40

0

看着你的客戶端代碼看起來你是e從ajax調用xpecting格式化的html,但你只是回顧ToString(正如Jon Skeet所說)。

如果這是您的意圖,那麼您應該將字符串格式化爲有效的HTML,但最好以json格式返回數據並將其轉換爲HTML客戶端。

+0

我應該補充說,MVC的整個想法是分離關注。因此,向用戶呈現數據是該觀點的關注點。所以,你不應該從控制器返回格式化的HTML。 – 2012-01-28 10:09:29