2012-02-15 11 views
0

我新的MVC 3,並有這個問題入手,@foreach環3

我有一個類定義爲

Class abc 
    { public string Id { get; set; } 
      public string str1 { get; set; } 
      public string Action { get; set; } 
      public string Name { get; set; } 
      public string Title {get; set;} 

    } 

我MVC2的aspx的ViewPage,我就是用這個ABC類爲模型,並有這個代碼

<% 
    Model.ForEach(a => 
      { %> 
       <%= Html.ActionLink(a.Title , 
            a.Action , // <-- ActionMethod 
            a.Name , // <-- Controller Name.  
            new { key = a.Id }, // <-- Route arguments.  
            new { title = a.str1 })%> 
         <br /><br />   


        <% }); %> 

可以請你幫我這一段代碼轉換爲MVC Razor視圖?, @model ABC

<% 
      Model.ForEach(a => 
      { %> 
       <%= Html.ActionLink(a.Title , 
            a.Action , // <-- ActionMethod 
            a.Name , // <-- Controller Name.  
            new { key = a.Id }, // <-- Route arguments.  
            new { title = a.str1 })%> 
         <br /><br />   


        <% }); %> 

當我嘗試使用@foreach(模型中的var abc)時,我得到錯誤消息,需要實現Ienumerable?如何使用@for實現請幫助或給我指針。謝謝

回答

0

我建議你使用顯示模板。這樣你就不需要編寫任何循環。所以:

@model IEnumerable<abc> 
@Html.DisplayForModel() 

,然後你定義將自動被渲染的模型集合(~/Views/Shared/DisplayTemplates/abc.cshtml)的每個元素的顯示模板:

@model abc 
@Html.ActionLink(
    Model.Title, 
    Model.Action, 
    Model.Name, 
    new { key = Model.Id }, 
    new { title = Model.str1 } 
) 
<br /><br />   

注意,按照慣例,模板。它們必須放置在~/Views/Shared/DisplayTemplates文件夾或~/Views/SomeController/DisplayTemplates文件夾中,具體取決於您是要在多個控制器或單個控制器的視圖之間重複使用它們。 ASP.NET MVC首先在特定文件夾中查找模板,然後在Shared中查找。文件的名稱也很重要。在這種情況下,您的模型由IEnumerable<abc>組成,其中abc是此集合中元素的類型,因此顯示模板必須被稱爲abc.html

相同的規則適用於編輯器模板。只需將display替換爲editor即可。顧名思義,編輯器模板適用於輸入字段以編輯視圖模型。

1

該模型只顯示一個對象,而不是對象列表。 因此,您不應該使用ForEach,而是直接訪問屬性而不使用循環作爲Model.Name等。 如果您需要對象列表,那麼您需要更新控制器以使用通用列表返回這些列表,例。

var abcCollection = new List<abc>(); 

這應該指向正確的方向。

1

user1005310,

對Razor語法的一點理解在這裏會有所幫助。谷歌先生有很多例子。但是,如果你有一段代碼需要轉換,那麼你有一個很棒的'工具'來幫助(現在OSS,最初由Telerik開發)。看一看:

https://github.com/telerik/razor-converter

這基本上是一個轉換器是需要一整套ASPX意見,並將它們轉換成剃刀。我現在已經在幾個測試項目上嘗試過了,它的工作效率達到我滿意度的99%,另外1%正在解決(或者我可以在小調整中生活)。