pon*_*ead 21 c# asp.net asp.net-mvc-3
我在Asp.Net有一个网站,我试图移植到MVC 3,我之前只使用过MVC 2.我偶然发现了以下的asp函数
<div class="popup-holder">
<ul class="popups">
<asp:Repeater runat="server" ID="ourTeamRepeater" OnItemDataBound="ourTeamRepeater_ItemDataBound">
<ItemTemplate>
<asp:Panel ID="pnlTeamMember" runat="server">
<li id="TeamMember" runat="server" class="memberImage">
<asp:Image runat="server" ID="memberImg" />
</li>
<div class="popup">
<div class="img-holder">
<asp:Image runat="server" ID="memberImgBig" />
</div>
<div class="popup-text-t">
<div class="close">
close
</div>
</div>
<div class="popup-text">
</div>
<div class="popup-text-b">
</div>
<div class="holder">
<asp:Literal ID="memberDescription" runat="server" />
</div>
</div>
</asp:Panel>
</ItemTemplate>
</asp:Repeater>
</ul>
Run Code Online (Sandbox Code Playgroud)
看起来这可能与for循环类似,但我不太肯定如何将其转换为MVC 3架构.
Dar*_*rov 37
将现有WebForms应用程序移植到ASP.NET MVC不仅仅是盲目地逐行转换一些WebForms视图代码.您应该考虑目标平台的语义.例如,将其asp:Repeater
转换为丑陋的foreach
循环而不是考虑视图模型之类的东西,显示模板不会很好.
所以在ASP.NET MVC中,您首先要设计视图模型:
public class MemberViewModel
{
public int Id { get; set; }
public string Description { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后你设计一个控制器动作来填充这个视图模型:
public ActionResult Index()
{
IEnumerable<MemberViewModel> model = ...
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
然后你编写一个强类型视图,在其中调用显示模板:
@model IEnumerable<MemberViewModel>
@Html.DisplayForModel()
Run Code Online (Sandbox Code Playgroud)
然后定义一个显示模板,该模板将为collection(~/Views/Shared/DisplayTemplates/MemberViewModel.cshtml
)的每个元素呈现:
@model MemberViewModel
<li id="TeamMember" class="memberImage">
<img src="Url.Action("ThumbnailImage", new { id = Model.Id })" alt=""/>
</li>
<div class="popup">
<div class="img-holder">
<img src="Url.Action("FullImage", new { id = Model.Id })" alt=""/>
</div>
<div class="popup-text-t">
<div class="close">
close
</div>
</div>
<div class="popup-text"></div>
<div class="popup-text-b"></div>
<div class="holder">
@Html.DisplayFor(x => x.Description)
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
现在您将注意到两个额外的ThumbnailImage
和FullImage
控制器操作,这些操作将允许我们获取给定成员ID的成员的图像.例如:
public ActionResult ThumbnailImage(int id)
{
byte[] thumbnail = ...
return File(thumbnail, "image/jpeg");
}
Run Code Online (Sandbox Code Playgroud)
现在,这更像是ASP.NET MVC.正如您所看到的,它与传统WebForms完全不同.
Ste*_*gan 17
你认为MVC等效于asp:Repeater是完全正确的
<% foreach( var item in Model )
{ %>
<!-- Your HTML Markup -->
<% } %>
Run Code Online (Sandbox Code Playgroud)
你是对的,它与for
循环类似.一个简单的实现可能如下所示:
<div class="popup-holder">
<ul class="popups">
<%foreach(var item in Model.Items) { %>
<div id="pnlTeamMember">
<img src="<%: item.MemberImageSrc %>" ID="memberImg" />
<div class="popup">
<div class="img-holder">
<img src="<%: item.MemberImgBigSrc %>" ID="memberImgBig" />
</div>
<div class="popup-text-t">
<div class="close">
close
</div>
</div>
<div class="popup-text">
</div>
<div class="popup-text-b">
</div>
<div class="holder">
<%: item.MemberDescription %>
</div>
</div>
</div>
<% } %>
</ul>
Run Code Online (Sandbox Code Playgroud)
您会注意到runat="server"
代码隐藏中不再有任何控件,也没有任何事件链接到处理程序.相反,我们假设控制器已Model
使用表示我们需要显示的数据的对象填充对象.这是使用MVC时控制器的作用.
归档时间: |
|
查看次数: |
22586 次 |
最近记录: |