mvc 3相当于function?
我在Asp.Net有一个网站,我试图移植到MVC 3,我之前只使用过MVC 2。 我偶然发现了以下的asp函数
-
close
看起来这可能与for循环类似,但我不太肯定如何将其转换为MVC 3架构。
将现有的WebForms应用程序移植到ASP.NET MVC不仅仅是盲目地逐行转换一些WebForms视图代码。 您应该考虑目标平台的语义。 例如,将这个asp:Repeater
转换为丑陋的foreach
循环,而不是考虑视图模型之类的东西,显示模板不会很好。
所以在ASP.NET MVC中,您首先要设计视图模型:
public class MemberViewModel { public int Id { get; set; } public string Description { get; set; } }
然后你设计一个控制器动作来填充这个视图模型:
public ActionResult Index() { IEnumerable model = ... return View(model); }
然后你编写一个强类型视图,在其中调用显示模板:
@model IEnumerable @Html.DisplayForModel()
然后定义一个显示模板,该模板将为集合的每个元素呈现( ~/Views/Shared/DisplayTemplates/MemberViewModel.cshtml
):
@model MemberViewModel close @Html.DisplayFor(x => x.Description)
现在您将注意到另外两个ThumbnailImage
和FullImage
控制器操作,这些操作将允许我们获取给定成员ID的成员的图像。 例如:
public ActionResult ThumbnailImage(int id) { byte[] thumbnail = ... return File(thumbnail, "image/jpeg"); }
现在,这更像是ASP.NET MVC。 正如您所看到的,它与传统WebForms完全不同。
你认为MVC等效于asp:Repeater是完全正确的
<% foreach( var item in Model ) { %> <% } %>
你是对的,它类似于for
循环。 一个简单的实现可能如下所示:
<%foreach(var item in Model.Items) { %> close <%: item.MemberDescription %> <% } %>
您会注意到runat="server"
不再有任何控件,也没有任何事件链接到代码隐藏中的处理程序。 相反,我们假设控制器已使用表示我们需要显示的数据的对象填充了Model
对象。 这是使用MVC时控制器的作用。
转发器只是一个提供数据绑定的循环,因此您可以访问正在循环的集合中的项目。 如果查看ourTeamRepeater_ItemDataBound
方法,您将找到使用数据绑定项的代码,以使用数据填充项模板中的元素。
通常你可以在MVC中使用foreach
循环来循环项目。 例:
<% foreach (var item in items) { %> <%= item.Description %> <% } %>