c# - 如何在Classic ASP.NET中实现UserControl的RenderPartial并将序列化结果发送到浏览器
问题描述
在 Classic ASP.NET 中有 LoadControl 方法。但是如果我以同样的方式创建 UserControl 的基类
public class RenderingControl : System.Web.UI.UserControl
{
public string GetHtml(Type ControlType, int id1)
{
var page = new Page();
var control = page.LoadControl(ControlType, new object[] { id1 });
page.Controls.Add(control);
return RenderControlToHtml(control);
}
string RenderControlToHtml(Control control)
{
var sb1 = new StringBuilder();
control.RenderControl(new HtmlTextWriter(new StringWriter(sb1)));
return sb1.ToString();
}
}
(我所有的控件都是从基类派生的,带有额外的方法 GetHtml)
public partial class FilterStatus : RenderingControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
而不是尝试以相同的方式将此控件发送到浏览器
[WebMethod()]
public string Filters(string type, int id) {
var X = new FilterStatus();
return X.GetHtml(X.GetType(), id);
}
我在浏览器中收到需要控制的完整页面。这在我的项目逻辑中是错误的。我只需要接收我的 UserControl(就像在 ASP.NET MVC 中工作的 RenderPartial 一样)。如何在经典 ASP.NET 中执行此操作?
解决方案
RenderPartial 与 ASP.NET 无关。因为 ASP.NET 是特殊事件的传送器,例如 PageLoad。我已经将 RenderPartial 实现为最简单的文本处理器
public class GetControl : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/html";
try
{
string Fname = "";
string Base = HttpContext.Current.Server.MapPath("~/Filters");
switch (context.Request.QueryString["Filter"])
{
case "Status": Fname = "FilterStatus.htm"; break;
...
default: return;
}
string HTML = System.IO.File.ReadAllText(System.IO.Path.Combine(Base, Fname));
context.Response.Write(HTML.Replace("@", context.Request.QueryString["Id"]));
}
catch (Exception ex)
{
context.Response.Write(ex.Message);
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
推荐阅读
- r - 使用 R 中的 Rvest 从表中删除多个标题行
- angular - 从 ReplaySubjects 列表中获取第一个值,执行特定的操作,然后继续流式传输剩余的值
- android - 如何将 Android 上下文注入顶级函数
- listview - TListview (FMX) 下的 TTextButtonObjectAppearance 中的错误?
- azure - 如何识别每个用户的成本并在 azure 中进行管理
- python - 从列表中迭代以返回数据
- ios - 实现 Stripe 时必需的 Init 抛出致命错误
- python - 使用 Jupyter Notebook 通过 Python 在 Mongo 中进行聚合:空结果
- python - 在 python 生成的对象上使用 d3.select
- cors - 如何使用 Windows 身份验证在 ASP.NET Core Web API 中启用 CORS