2016-10-06 9 views
0

こんにちは私のコントローラから私のビューにいくつかのデータベース情報を渡そうとしていますが、最良の方法はありません。コントローラでモデルを作成していますが、データベースからそれらの値を入力する必要があります。私はDataAccessというクラスを持っていますが、それは私のすべてのクエリを含んでいますが、どこにロジックを配置するべきかわかりません。私はコントローラのforループを使って値を設定しますが、SchedulerViewModelを宣言してから失敗するようです。コントローラからデータベースに情報を渡して.NET MVCで表示する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

理想的には、データベースアクセスを処理するサービスクラスが必要です。コントローラーからデータレイヤーを直接呼び出してはいけませんが、何もできません。簡単にするために、データアクセスをコントローラに直接呼び出すだけです。このアイデアは、ビューがこのデータを表示できるように、コントローラのレベルのビューでデータのコレクション(ここではIEnumerable)を返す必要があるということです。

コントローラー:

[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) 

次に、テーブルの行をテーブルに追加するために、モデルの各行をループしています。 Entity FrameworkからModel Bindingを使用しているからです。私たちはRazor Syntaxを使用しています。最後の列の各行に対してアクションリンクを使用しています。これにより、データ行の詳細を編集、削除、または提供することができます。しかし、私はそれのために別のコントローラアクションを呼び出す必要があります。たとえば、Edit Viewに単一のISSUEを返すEdit Controllerアクションメソッドがあるとします。

@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

基本的に私は必要なもの、私は特定のオプションを選択することができるようにラジオボタンの隣のテーブルのすべてのレコードを表示することです。申し訳ありませんが、GetIssueByIdメソッドがリストを返すことになっているIEnumerableが新です。その人口問題から? –

+0

IEnumerableは反復可能なコレクションに過ぎません。私はあなたに1対1の関係があるかもしれないシナリオを示していました。あなたは単にすべてのデータのテーブルを表示しようとしているのですが、各行にラジオボタンがありますので、レコードを編集したり編集したりできますか? –

+0

はい、それは私が達成しようとしているものです。そのテーブルのすべての値を表示しようとしていて、各行の隣には「編集」と「削除」のリンクがあります。それでもやっているのは –

関連する問題