2012-02-15 23 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%正在解决(或者我可以在小调整中生活)。