2016-10-06 38 views
0

你好,我試圖從我的控制器傳遞一些數據庫信息到我的視圖,但沒有找到最好的方法來做到這一點。我在我的控制器中填充模型,但我需要從數據庫填充這些值。我有一個名爲DataAccess的類,它包含我所有的查詢,但不知道應該將邏輯填充到哪裏。我會說我的控制器中的for循環來填充值,但似乎失敗,因爲我在那裏宣佈SchedulerViewModel從控制器傳遞數據庫信息在.NET MVC中查看

這個想法是讓我的值旁邊的單選按鈕,所以當選擇一個單選按鈕時,我可以 「檢測」 的價值,做這種選擇的東西....任何建議,將不勝感激......

我的模型:

public class SchedulerViewModel 
{ 
    public string theValue { get; set; } 
    public SelectListItem[] Items { get; set; }   
} 

我的控制器:

public ActionResult Scheduler() 
{ 
    //DataAccess dataAccess = new DataAccess(); 
    //for loop here???      
    var model = new SchedulerViewModel 
    {      
     Items = new[] 
     { 
      new SelectListItem { Value = "U", Text = "USA" }      
     } 
    }; 
    return View(model); 
} 

我的觀點:

@using (Html.BeginForm()) 
{ 
    for (int i = 0; i < Model.Items.Count(); i++) 
    { 
     @Html.RadioButtonFor(x => x. theValue, Model.Items[i].Value, new { id = "item_" + i }) 
     @Html.Label("item_" + i, Model.Items[i].Text) 
     <br /> 
    } 
} 

回答

1

理想情況下,你將有一個處理你的數據庫訪問服務類。你不應該直接從控制器調用數據層,儘管沒有什麼能阻止你這樣做。爲了簡單起見,我只是直接在控制器中調用數據訪問。這個想法是,您需要在控制器級別的View中返回一組數據,這裏是一個IEnumerable,以便View可以顯示這些數據。

控制器:

[HttpGet] 
public ActionResult Index() 
{ 
KnowledgeBaseEntities context = new KnowledgeBaseEntities(); 
IEnumerable<ISSUE> issues = context.ISSUES; 
if(issues == null) 
{ 
    return HttpNotFound(); 
} 
return View(issues); 
} 

查看: 正如你可以看到我引用的數據我是從控制器期待的集合。

@model IEnumerable<ISSUE> 

在這種情況下,它是一個IEnumerable,就像我在控制器中一樣。然後你會注意到我在迭代模型時引用了一個Model對象。

@foreach (var item in Model) 

然後,我循環遍歷模型的每一行,以便將錶行添加到表中。因爲我們使用實體框架中的模型綁定。我們使用的是Razor語法。您還注意到我在最後一列中的每一行都使用了Action Links。這使我可以編輯,刪除或爲一行數據提供詳細信息。不過,我需要爲此調用另一個Controller Action。例如,您將擁有一個編輯控制器操作方法,可將單個ISSUE返回到編輯視圖。

@model IEnumerable<ISSUE> 
@{ 
ViewBag.Title = "Knowledge Base Issues"; 
Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
<h2 class="line">All Issues</h2> 
<p> 
@Html.ActionLink("Create New", "Create") 
</p> 
<table class="flat"> 
<tr> 
    <th>@Html.DisplayNameFor(model => model.KEYWORDS)</th> 
    <th>@Html.DisplayNameFor(model => model.SUBJECT)</th> 
    <th>@Html.DisplayNameFor(model => model.DATE_ENTERED)</th> 
    <th></th> 
</tr> 
@foreach (var item in Model) { 
<tr> 
    <td>@Html.DisplayFor(modelItem => item.KEYWORDS)</td> 
    <td>@Html.DisplayFor(modelItem => item.SUBJECT)</td> 
    <td>@Html.DisplayFor(modelItem => item.DATE_ENTERED)</td> 
    <td> 
     @Html.ActionLink("Edit", "Edit", new { id=item.ISSUE_ID }) | 
     @Html.ActionLink("Details", "Details", new { id=item.ISSUE_ID }) | 
     @Html.ActionLink("Delete", "Delete", new { id=item.ISSUE_ID }) 
    </td> 
</tr> 

}

+0

基本上是我需要的是顯示錶的所有記錄旁邊的一個單選按鈕,這樣我就可以選擇特定的選項。對不起,我是IEnumerable的新手,GetIssueById方法應該返回一個列表?並從該填充問題? –

+0

IEnumerable只是一個可迭代的集合。我正在展示一個場景,你可能會有一對多的關係。你只是試圖展示一張所有數據的表格,並且每行都有一個單選按鈕,讓你刪除,編輯等記錄? –

+0

是的,那正是我想要實現的。試圖顯示該表的所有值,並在每行旁邊顯示帶有「編輯」和「刪除」的鏈接。仍處理該問題 –

相關問題