2012-01-03 4 views
0

私のビューから自分のモデルにアクセスする方法を理解できないようです。私は混乱しています。私のビューから私のモデルにアクセスするには?

ここは私のホームコントローラです。私は「標本」にアクセスすることができるだろうと想定

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> 

<% foreach (WildlifeTropical.Models.specimen s in ??????) 
    { %> 
    <div>s.Name</div> 
<% } %> 

public class HomeController : Controller 
{ 
    wildtropEntities wildlifeDB = new wildtropEntities(); 

    public ActionResult Index() 
    { 
     ViewData["CurrentDate"] = System.DateTime.Now.ToString("MM/dd/yyyy"); 

     var specimens = from s in wildlifeDB.specimen1 
         select s; 

     return View(specimens); 
    } 

} 

そして、ここでは私のビューから夫婦スニペットをしている:私は「標本」は、データベースからデータが移入されていることを確認しました私はそれをコントローラからのビューに渡したので(つまりビュー(標本)を返す)...しかし、それは動作していません。

答えて

3

:ビューはSystem.Web.Mvc.ViewPage<IEnumerable<WildlifeTropical.Models.specimen>>を継承する方法を

<%@ Page 
    Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<IEnumerable<WildlifeTropical.Models.specimen>>" %> 

<% foreach (WildlifeTropical.Models.specimen s Model) { %> 
    <div><%= Html.Encode(s.Name) %></div> 
<% } %> 

をお知らせ今すぐループすることができるspecimensのコレクションに強く入力されます。

これは個人的には私の意見にforeachループを書くのが好きではないと言われています。彼らはそれらを醜く見せる。

<%@ Page 
    Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<IEnumerable<WildlifeTropical.Models.specimen>>" %> 
<%= Html.DisplayForModel() %> 

、その後、私は自動的にモデルコレクション(~/Views/Shared/DisplayTemplates/specimen.ascx)の各要素に対してレンダリングされる表示テンプレートを定義します::この場合、私は表示テンプレートを使用する方法を参照してください

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<WildlifeTropical.Models.specimen>" %> 
<div> 
    <%= Html.DisplayFor(x => x.Name) %> 
</div> 

specimen.ascxユーザーコントロールは現在、厳密にはSystem.Web.Mvc.ViewUserControl<WildlifeTropical.Models.specimen>と入力されています。これは、メインビューモデルの各標本に対してレンダリングされるためです。

+0

ありがとうございました。私はあなたが提供したコードの最初のブロックを実装しようとしました(私は最初の部分が働いた後、私は次の部分に移動すると思った)。私はデバッグするとき、私は表示されている名前のリストで終わるわけではない...代わりに私は文字通りs.Name、s.Nameなどを取得する何が間違っている可能性がありますか?前もって感謝します。 – user1125648

+0

@ user1125648、はい、私は私の答えでタイプミスをしたからです。あなたは '

<%= Html.Encode(s.Name) %>
'を使うべきです。私はこれを解決するために私の答えを更新しました。 –

+0

私はそれを考え出した...私は<%= %>タグが紛失していた。今私を撃つ。 – user1125648

0

MVC2についてはわかりません。 MVC 3(Razor View Engineを使用)では、Model/ViewModelをこのようなビューに渡すことができます。

あなたのビューが強く、あなたのコントローラのアクション( IEnumerable<specimen>)からに渡しているものです specimenのコレクションに型付けさせる必要があります
@model MyProject.ViewModel.UserViewModel 
@{ 
    ViewBag.Title = "Welcome To My Site"; 
} 
<div class="divSubHead"> 
<h2>Hello @Model.FirstName</h2></div> 
0

これはいかがですか?ページの継承に注意してください。

<%@ Page Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of IEnumerable(Of Specimen))" %> 

<% foreach (WildlifeTropical.Models.specimen s in Model) 
    { %> 
    <div>s.Name</div> 
<% } %> 
関連する問題