2016-02-19 42 views
0

我有一個類,像這樣:ASP.NET通模式來查看

public class wsvListTagHistoryClass 
    { 
     public int TagId { get; set; } 
     public int GroupId { get; set; } 
     public string GroupName { get; set; } 
     public string Entered { get; set; } 
     public string DHours { get; set; } 
     public string GPS { get; set; } 
    } 

,在我的視圖控制器,我填充類,像這樣:

int TagId = Convert.ToInt32(Request.QueryString["TagId"]); 

      wsvListTagHistoryCell = new List<wsvListTagHistoryClass>(); 

      try 
      { 
       //Create SQL Connection 

       using (connection = new SqlConnection(connectionString)) 
       { 

        //Open Connection 

        connection.Open(); 

        //Run iosShowGroup Stored Procedure 

        using (SqlCommand command = new SqlCommand("wsvListTagHistory", connection)) 
        { 

         command.CommandType = CommandType.StoredProcedure; 

         //Input Parameters 

         SqlParameter parameter1 = new SqlParameter("@TagId", SqlDbType.Int); 
         parameter1.Value = TagId; 
         parameter1.Direction = ParameterDirection.Input; 
         command.Parameters.Add(parameter1); 

         //Execute Query 

         using (SqlDataReader reader = command.ExecuteReader()) 
         { 
          //Get Group Data 

          while (reader.Read()) 
          { 

           //Create New Class Object 

           wsvListTagHistoryClass item = new wsvListTagHistoryClass(); 

           //Populate Object with Results 

           item.TagId = (int)reader[0]; 
           item.GroupId = (int)reader[1]; 
           item.GroupName = reader[2].ToString(); 
           item.Entered = reader[3].ToString(); 
           item.DHours = reader[4].ToString(); 
           item.GPS = reader[5].ToString(); 

           //Add Results to List 

           wsvListTagHistoryCell.Add(item); 
          } 
         } 

        } 
       } 
      } 
      finally 
      { 
       //Close Connection 

       connection.Close(); 
      } 

      return View(wsvListTagHistoryCell.ToList()); 

,然後嘗試做在我看來,一個foreach像這樣:

@model IEnumerable<WebServiceAPI.Models.wsvListTagHistoryClass> 

@{ 
    ViewBag.Title = "Index"; 
} 

@foreach(var item in Model) 
{ 
    @Html.DisplayFor(modelItem => item.TagId) 
} 

<h2>Index</h2> 

我沒有錯誤,但我的問題是,出現任何內容,標籤識別不會出現在所有。我究竟做錯了什麼?

+0

最好嘗試exec的在SQL管理工作室等你storeprod檢查是否有輸出(TagId) –

+0

在返回視圖行上設置一個斷點,以查看您是否實際返回任何內容,如果是,請在視圖中的@foreach上設置斷點以查看它正在執行的操作。 將它運行後,將該Sql功能移到另一個類中,保持您的控制器精益和清潔是一種好的做法。 – MartijnK

+0

可能是視圖中的foreach中的拼寫錯誤,但它爲什麼是modelItem => item.TagId?它不應該是modelItem => modelItem.TagId? – Markus

回答

1

您未傳遞數據的對象。

wsvListTagHistoryClass item = new wsvListTagHistoryClass(); 
    item.TagId = (int)reader[0]; 
    item.GroupId = (int)reader[1]; 
    item.GroupName = reader[2].ToString(); 
    item.Entered = reader[3].ToString(); 
    item.DHours = reader[4].ToString(); 
    item.GPS = reader[5].ToString(); 
    return View(item); 

刪除wsvListTagHistoryCell.Add(item);
希望這有助於

+0

這不起作用 – user979331

+0

嘗試更新的代碼 – anand

+0

檢查'讀者'變量有數據 – anand

0

的問題是在使用DisplayFor。此方法擴展了HtmlHelper類。每個視圖對於在頂部定義的模型類型都有一個HtmlHelper。雖然你的代碼編譯,通過使用

Html.DisplayFor(modelItem => item.TagId); 

你告訴視圖中創建一個顯示器上是IEnumerable<WebServiceAPI.Models.wsvListTagHistoryClass>類型的模型的屬性TagId。雖然lambda表達式不會導致模型上的屬性(請記住,HtmlHelper對於模型類型IEnumerable<WebServiceAPI.Models.wsvListTagHistoryClass>是強類型的),但MVC「足夠好」,不會引發錯誤,但不會引發任何錯誤。

爲了解決這個問題,我可以推薦以下選項:

迭代而是在foreach模型的項目,只需使用Html.DisplayFor(x => x)沒有foreach條款。 MVC會迭代項目並嘗試顯示它們。爲了只顯示TagId屬性,您可以爲您的模型類創建一個顯示模板。有關顯示和編輯器模板的概述,請參閱此link

如果有一般可用於顯示wsvListTagHistoryClass你還可以創建模型類型wsvListTagHistoryClass一個部分沒有顯示佈局。你把你的foreach聲明並呈現偏每個項目:

@foreach(var item in Model) 
{ 
    Html.RenderPartial("PartialTestModel", item); 
} 

部分碼是類似以下內容:

@model TestWebAppMVC.Models.TestModel 
<div> 
    Tag ID = @Html.DisplayFor(x => x.TagId) 
</div>