mhm*_*hmd 5 asp.net caching webforms substitution donut-caching
虽然我们在Substitution控件中使用的方法应该返回字符串,那么如何在服务器控件上使用web表单中的donut缓存呢?
例如Loginview控件?
更新 这是一个完全有效的例子.这里发生了一些事情:
这是标记:
<asp:Substitution runat="server" methodname="GetCustomersByCountry" />
Run Code Online (Sandbox Code Playgroud)
这是回调
public string GetCustomersByCountry(string country)
{
CustomerCollection customers = DataContext.GetCustomersByCountry(country);
if (customers.Count > 0)
//RenderView returns the rendered HTML in the context of the callback
return ViewManager.RenderView("customers.ascx", customers);
else
return ViewManager.RenderView("nocustomersfound.ascx");
}
Run Code Online (Sandbox Code Playgroud)
这是用于呈现用户控件的帮助器类
public class ViewManager
{
private class PageForRenderingUserControl : Page
{
public override void VerifyRenderingInServerForm(Control control)
{ /* Do nothing */ }
public override bool EnableEventValidation
{
get { return false; }
set { /* Do nothing */}
}
}
public static string RenderView(string path, object data)
{
PageForRenderingUserControl pageHolder = new PageForUserControlRendering();
UserControl viewControl = (UserControl) pageHolder.LoadControl(path);
if (data != null)
{
Type viewControlType = viewControl.GetType();
FieldInfo field = viewControlType.GetField("Data");
if (field != null)
{
field.SetValue(viewControl, data);
}
else
{
throw new Exception("ViewFile: " + path + "has no data property");
}
}
pageHolder.Controls.Add(viewControl);
StringWriter result = new StringWriter();
HttpContext.Current.Server.Execute(pageHolder, result, false);
return result.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
请参阅以下相关问题:
归档时间: |
|
查看次数: |
4664 次 |
最近记录: |