快速业务通道

Asp.Net 4.0新特性,输出更纯净的Html代码 ClientIDMode,ViewStateMode等

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
 Html.RenderPartial("Profile", profile); %>
   <% } %>
</table>

上面的代码,我将一个profile的List渲染成一个table。每一行定义了一个 Partial,用来渲染成一行。即使内容页不能与其他View分享,在一个View中使用 partial可以简化和减少HTML的标签数量。RenderPartial方法需要一个partial名 字和一个Model 参数。根据的partial名字用来搜索本地的partial文件,需遵循 下面的规则:

1 <Area>\<Controller>\<PartialName>.aspx and .ascx

2 <Area>\Shared\<PartialName>.aspx and .ascx

3 \<Controller>\<PartialName>.aspx and .ascx

4 \Shared\<PartialName>.aspx and .ascx

这些搜索类似于根据view的name搜索view,也可以使用<%= Html.Partial ("Profile", profile) %> 渲染。Profile文件即可以是一个ASCX文件,如果 必要也可以是一个aspx的文件。Profile的代码如下:

<%@ Control Language="C#"  Inherits="System.Web.Mvc.ViewUserControl<Profile>" %>
<tr>
   <td>
     <%= Html.ActionLink(Model.Username, "Show", new{ username =  Model.Username }) %>
   </td>
   <td><%= Model.FirstName%></td>
   <td><%= Model.LastName%></td>
   <td><%= Model.Email %></td>
</tr>

我们在View中如下渲染Profiles:

<% Html.RenderPartial("Profiles", Model); %>

渲染效果如下:

3、Child Action

Partial用来显示已经存在Model的信息时非常方便的。但是有时候View上显示 的数据源自其他Model。例如,登录控件可能会显示当前用户的名称和电子邮件, 但该View的主体部分与用户关系不大。可以使用ViewDataDictionary来传递没联 系的Model,但是我们可以使用 Child Action。对于在View中显示与主体没有多 大关系的信息,这里介绍一下Child Action的使用。下面举例子说明。

在模板页中显示当前的用户信息,当用户登录之后,显示用户名,邮箱之类的 信息,当用户没有登录,给出登录的连接。在模板页中加入下面代码:

<div id="logindisplay">
         <%= Html.Action("LogOnWidget", "Account") %>
       </div>

LogOnWidget的代码如下,ChildActionOnly确保只能通过RenderAction调用此 方法。

[ChildActionOnly]
public ViewResult LogOnWidget()
{
   bool isAuthenticated = Request.IsAuthenticated;
   Profile profile = null;

   if (isAuthenticated)
   {
     var username = HttpContext.User.Identity.Name;
     profile = _profileRepository.Find(username);
     if (profile == null)
     {
       profile = new Profile(username);
       _profileRepository.Add(profile);
     }
   }

   return View(new LogOnWidgetModel(isAuthenticated,  profile));
}

用一个用户控件来显示这个Action的Model的信息,用户控件代码如下。

<%@ Control Language="C#"  Inherits="System.Web.Mvc.ViewUserControl" %>
<%@ Import Namespace="AccountProfile.Controllers"%>
<%
   if (Request.IsAuthenticated) {
%>
     Welcome <b><%= Html.Encode (Page.User.Identity.Name) %></b&

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号