2013-01-18 70 views
2

任何人都可以告訴我如何在我的視圖中循環查看錶格嗎? 我的行是:disease_id, disease, and remedy.如何在C#MVC視圖中循環數據庫記錄3

我的數據庫查詢

我試圖讓所有的結果到一個列表,這樣我就可以通過他們循環在視圖中。

 SqlCommand cmd = new SqlCommand("SELECT * FROM disease", m_DBCon); 
     m_Reader = cmd.ExecuteReader(); 

     List<string> record = new List<string>(); 
     while (m_Reader.Read()) 
     { 
      string s = Convert.ToString(m_Reader[0]); 
      record.Add(s); 
     } 

     ViewBag.Record = record; 

我查看

我想回路表

@{ 
    ViewBag.Title = "Dashboard"; 
    List<string> record = ViewBag.Record; 
} 

我不斷收到一個空字符串的數據庫記錄。我以爲我會不得不做一些像s [「疾病」],s [「補救」)的東西,但是s是一個字符串,所以它沒有所有這些字段。

@{ 
     foreach (string s in record) 
     { 
      <tr> 
       <td>@s</td> 
      </tr> 
     } 
    } 

任何人都可以請給我一些建議:)

+0

jream - 恕我直言,你這樣做是錯誤的多項一級1.你應該有你的引用抽象庫你的控制器 - 你不應該在控制器動作中不處理SqlCommand。其次,您不需要定義硬模型,也可以不定義ViewModel來捕獲視圖所需的數據。不是主要的罪,而是可維護性和專注的真正障礙。我的建議是,以最低標準和最佳實踐爲基礎,以標準實踐爲基礎來做所有這些工作。很抱歉,您需要在這個問題之前研究mvc最佳做法 –

+0

btw-apologies如果上述聽起來很刺耳,只是想讓您做正確的事情,再加上您會發現這很顯然,您對「幫助」的要求會降低以對數形式尋求幫助。我知道,因爲我在同一時間:) –

回答

4

我首先想指出的是,首先創建一個DiseaseResult類可能更容易。 這樣的:

public class DiseaseResult 
{ 
    public int DiseaseId { get; set; } 
    public string Disease { get; set; } 
    public string Remedy { get; set; } 
} 

使事情變得更容易一些。現在,你可以說:

public ActionResult Index() 
{ 
    SqlCommand cmd = new SqlCommand("SELECT [disease_id], [disease], [remedy] FROM disease", m_DBCon); 
    m_Reader = cmd.ExecuteReader(); 

    List<DiseaseResult> record = new List<DiseaseResult>(); 
    while (m_Reader.Read()) 
    { 
     record.Add(new DiseaseResult() { DiseaseId = m_Reader[0], Disease = m_Reader[1], Remedy = m_Reader[2]); 
    } 

    return View(record); 
} 
在您查看

之後:

@model List<DiseaseResult> 

@foreach(DiseaseResult item in Model) 
{ 
    <div>@item.Disease</div> 
} 
+0

通過使用像Dapper,EntityFramework或Telerik OpenAccess這樣的Entity Mapper或ORM框架,您還可以使您的生活變得更加輕鬆。即使使用DataSet或DataTable。 –

+0

我是一個非常大的初學者我還沒有理解所有這些嚴格的模型鑄造的東西:( – JREAM

+0

+1先生年輕,你有點封鎖我的意見在OP問題,我通常會標記你永遠在SqlCommand訪問在控制器。去工作 - 使用REPO模式將它重構成一個良好的答案,如果你喜歡的話:)畢竟,使用屬性獲取器/設置器比記錄[0] [「disease_Id」]更容易和無bug。 yuck - 疾病纏身! –

2

的三個項目disease_iddiseaseremedy,他們是值或列? desease表中有多少條記錄?似乎你把「記錄」與「來自不同記錄的字段值」集合混淆了。嘗試

string s = Convert.ToString(m_Reader[0]) + "," + Convert.ToString(m_Reader[1]) + "," + Convert.ToString(m_Reader[2]); 
+0

三種疾病,疾病,補救措施都是列名。我在桌上只有1條記錄,但生病了大約20條:)。 – JREAM

+0

我想我會想我的項目在數組中,如:記錄[0] [「disease_Id」],記錄[1] [「disease_Id」]等。所以我可以循環通過他們,做我想要的。 – JREAM

1

我的看法對同一環境的代碼是這樣的:使用

<% foreach (var item in Model.Item) 
{ 
%> 
    <tr> 
    <td> 
     <%: item.Id %> 
    </td> 
    <td> 
     <%: item.Name %> 
    </td> 
    </tr> 
<% 
} 
%> 

一個變種代替允許您從記錄拉動對象隱式,而投比強烈。我相信這是您在上面的代碼中遇到的問題。看看下面的鏈接瞭解更多信息:

http://msdn.microsoft.com/en-us/library/bb383973.aspx

我希望這有助於。

+0

我認爲這是正確的路要走。但是,我不認爲他在使用「模型」對象。而是他正在使用ViewBag.Record。 – user959729

+0

使用'var'而不是具體類型與原始問題無關。即使使用'var','item'的類型也必須從Model.Item的類型確定性地導出。 – Igor

+0

此外,我會建議使用@符號而不是<%。對我來說,使用MVC3時看起來更乾淨。 – user959729

相關問題