2017-07-26 35 views
0

我無法找到任何與Visual Studio 2017一起使用的更新答案。我一直堅持了一整天,試圖找出它,並且我在網上找到的每個指南都非常過時,或者我嘗試應用於我的任何內容代碼給我錯誤我無法修復。我使用C#,HTML5,ASP.NET MVC5和VS2017如何在我的MVC視圖中顯示存儲過程結果?

首先我有我的控制器,它連接到SQL Server數據庫有:

public void GetStoredProc() 
{ 
    Exclusion objExclusion = new Exclusion(); 

    string StrConnectionString = ConfigurationManager.ConnectionStrings["EligibilityContext"].ConnectionString; 

    SqlConnection sqlConnection1 = new SqlConnection(StrConnectionString); 

    SqlCommand cmd = new SqlCommand(); 
    cmd.CommandText = "[advantage].[GetAdvantageEligibilityDataOverride]"; 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Connection = sqlConnection1; 

    sqlConnection1.Open(); 

    SqlDataReader reader = cmd.ExecuteReader(); 

    if (reader.HasRows) 
    { 
     int count = reader.FieldCount; 

     while (reader.Read()) 
     { 
      if (count > 3) 
      { 
       int IntNum; 
       int.TryParse(reader.GetValue(0).ToString(), out IntNum); 
       objExclusion.PolicyNo = IntNum; 
       objExclusion.PolicyMod = (reader.GetValue(1).ToString()); 
       objExclusion.InsuredName = (reader.GetValue(2).ToString()); 
       objExclusion.ClientID = IntNum;     
       //Console.WriteLine(reader.GetValue(i)); 
      } 
     } 
    } 

    // Data is accessible through the DataReader object here. 
    sqlConnection1.Close(); 
} 

這是我index.html頁。我知道這裏需要添加代碼才能顯示網頁,但我是一個編程noob,並且對於究竟要放什麼而感到茫然。

@model IEnumerable<Advantage_Exclusions_Eligibility.Models.Exclusion> 

@{ 
ViewBag.Title = "Index"; 
} 

<h2>AEE List</h2> 

<p> 
@Html.ActionLink("Create New", "Create") 
</p> 
<p> 
&nbsp;</p> 

<div> 
<table class="table"> 
<tr> 
    <th> 
     @Html.DisplayNameFor(model => model.PolicyNo) 
    </th> 
    <th> 
     @Html.DisplayNameFor(model => model.PolicyMod) 
    </th> 
    <th> 
     @Html.DisplayNameFor(model => model.InsuredName) 
    </th> 
    <th> 
     @Html.DisplayNameFor(model => model.ClientID) 
    </th> 
    <th></th> 
</tr> 

@foreach (var item in Model) 
{ 
<tr> 
    <td> 
     @Html.DisplayFor(modelItem => item.PolicyNo) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.PolicyMod) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.InsuredName) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.ClientID) 
    </td> 
    <td> 
     @Html.ActionLink("Edit", "Edit", new { id=item.PolicyNo }) | 
     @Html.ActionLink("Details", "Details", new { id=item.PolicyNo }) | 
     @Html.ActionLink("Delete", "Delete", new { id=item.PolicyNo }) 
    </td> 
</tr> 
} 
</table> 
    <div class="pagination"> 
     <nav id="AEEPagination" aria-label="Page navigation" 
style="display:none;"> 
      <ul class="pagination pagination-sm"></ul> 
     </nav> 
    </div> 
</div> 

任何和所有的幫助將不勝感激!

+1

Visual Studio的版本與您可以編寫的代碼無關,所以這不是排除解決方案的好藉口。 –

+0

@MikeMcCaughan我知道這通常沒有什麼區別。但是我發現的大多數解決方案都是從2012年或更早的版本開始的,並且我一直在嘗試複製它。也許它沒有版本差異,也許只是代碼格式化的方式。但我一直無法找到有效的解決方案。 –

+0

什麼是你的問題陳述?您是否面臨問題在View或其他內容中顯示數據? –

回答

1

您的方法public void GetStoredProc()將需要返回模型@model IEnumerable<Advantage_Exclusions_Eligibility.Models.Exclusion>或將其作爲參數並使用存儲過程的結果填充模型。

縮寫的例子可能是這樣的:

// Your url, eg. /<controller>/exclusions 
public ActionResult Exclusions() 
{ 
    var viewmodel = GetStoredProc(); 

    // pass your IEnumerable<Exclusion> to the view 
    return View(viewmodel); 
} 

// Note the return type 
public IEnumerable<Exclusion> GetStoredProc() 
{ 
    var exclusions = new List<Exclusion>(); 


    // ... ... 

    if (reader.HasRows) 
    { 
     int count = reader.FieldCount; 

     while (reader.Read()) 
     { 
      Exclusion objExclusion = new Exclusion(); // create a new exclusion for each row! 
      if (count > 3) 
      { 
       int IntNum; 
       int.TryParse(reader.GetValue(0).ToString(), out IntNum); 
       objExclusion.PolicyNo = IntNum; 
       objExclusion.PolicyMod = (reader.GetValue(1).ToString()); 
       objExclusion.InsuredName = (reader.GetValue(2).ToString()); 
       objExclusion.ClientID = IntNum;     
       exclusions.Add(objExclusion); // add the exclusion to your result set! 
      } 
     } 
    } 

    // Data is accessible through the DataReader object here. 
    sqlConnection1.Close(); 

    return exclusions; 
} 

在你看來,你還需要做出一些調整。在這種情況下,您的model是一個IEnumerable模型,因此沒有model.PolicyNo,model.PolicyMod等等正在表頭中使用。假設您的Exclusion模型類已經設置了顯示名稱屬性,您可以更改表格的標題以使用集合中第一個Exclusion模型的屬性。

<th> 
    @Html.DisplayNameFor(model => model.First().PolicyNo) 
</th> 
<th> 
    @Html.DisplayNameFor(model => model.First().PolicyMod) 
</th> 
<th> 
    @Html.DisplayNameFor(model => model.First().InsuredName) 
</th> 
<th> 
    @Html.DisplayNameFor(model => model.First().ClientID) 
</th> 
<th></th> 

我也建議把一些檢查圍着桌子,以確保有數據顯示:

@if (model.Any()) { 
    // Show the table 
    <th> 
     @Html.DisplayNameFor(model => model.First().PolicyNo) 
    </th> 
    <th> 
     @Html.DisplayNameFor(model => model.First().PolicyMod) 
    </th> 
    // ... 
} 

一個側面說明,這是很好的做法,包裹在using SQL連接。我抓住了我能找到的第一個解釋here。您甚至可以將您的SqlCommandSqlConnection鏈接在一起使用:

例如,

using (var conn = new SqlConnection(connectionString)) 
using (var cmd = new SqlCommand()) 
{ 
    // Use conn and cmd here. 
} 
+0

你好@njenson!感謝您的答覆。我認爲這有助於我走上正軌。但是,在我添加了IEnumerable和它的所有代碼後,我在「GetStoredProc()」下得到了一個錯誤。它說並不是所有的代碼路徑都被使用。我該如何去應用它?因爲應用程序仍然不會顯示任何沒有HTML代碼的權利? –

+0

@RoshaanKhan這聽起來像你錯過'GetStoredProc()'' – njenson

+0

'末尾的'return exclusions;'語句所以我添加了你說的所有內容,即使我有「返回排除項」,仍然有一些錯誤。這是錯誤之一。所以除了「GetStoredProc()」之外,並不是所有的代碼路徑都被使用。 Theres另一個錯誤在return關鍵字下劃線說:「ExclusionsController.GetStoredProc()返回void,一個返回關鍵字不能跟一個對象表達式。 我也有一些關於HTML的一些問題的警告,但我想我可以修復一旦這個問題得到解決 –

相關問題