HttpContext context)
{
foreach (var att in metadata)
{
var collection = (att.Source == UserControlRenderingPropertySource.QueryString) ?
context.Request.QueryString : context.Request.Params;
object value = collection[att.Key];
if (value != null) return value;
}
return null;
}
至此,UserControlRenderingHandler完成了。不过在真正使用时,还需要进行一些配置。例如,您需要在IIS的ISAPI Mapping中将“.ucr”与aspnet_isapi.dll进行映射,并且在web.config中将*.ucr与UserControlRenderingHandler关联起来。当然,对User Control的属性进行标记是必须的。例如还是《技巧:使用User Control做HTML生成》一文中的例子:
public partial class Comments : System.Web.UI.UserControl
{
protected override void OnPreRender(EventArgs e)
{
//
}
[UserControlRenderingProperty(Key = "page", Source = UserControlRenderingPropertySource.QueryString)]
public int PageIndex { get; set; }
[DefaultValue(10)]
public int PageSize { get; set; }
//
}
然后,在客户端代码中只要根据路径发起请求即可,UserControlRenderingHandler会在服务器端完成余下的工作。
<script type="text/javascript" language="javascript">
function getComments(pageIndex)
{
new Ajax.Updater(
"comments",
"/Controls/Comments.ucr?page=" + pageIndex + "&t=" + new Date(),
{ method: "get" });
return false; // IE only
}
</script>
不过,这就够了吗?对于一个例子来说,这已经足够了,不过要在产品环境中使用很可能还略显不够。例如,如果只让用户访问到特定的User Control,或者只有特定权限的用户才能访问,又该如何对UserControlRenderingHandler进行改造呢?相信您了解上述做法之后,这点要求对您一定不成问题。