【问题标题】:Passing parameter from .aspx.cs to .ashx将参数从 .aspx.cs 传递到 .ashx
【发布时间】:2011-05-05 18:49:38
【问题描述】:

我想将字符串传递给 .ashx 页面。

通常我会通过在 .aspx 页面中设置参数来做到这一点,例如:Loader="TreeLoader.ashx?passedVariable=hello"

但我想在 .aspx.cs 端以编程方式执行此操作,因为值会改变。

.ashx 页面接受 HTTPContext:

public void ProcessRequest(HttpContext context)
    {

不应该有什么办法给上下文加个参数,然后用类似这样的方式获取参数:

string searchString = context.Request["searchString"];

实现这一目标的最佳方法是什么?

【问题讨论】:

    标签: c# .net asp.net


    【解决方案1】:

    正确的方法将取决于控件是如何从 aspx 文件传递​​到 ashx 的。如果从服务器端调用处理程序(使用Server.Transfer 方法),那么您可以使用上下文对象本身。比如在aspx.c文件中

    HttpContext.Current["key"] = data;
    Server.Transfer("TreeLoader.ashx");
    

    在 ashx 文件中

    public void ProcessRequest(HttpContext context)
    {
        var data = context["key"];
        ...
    

    优点是您可以将实际对象作为数据(不一定是字符串)传递。

    如果将从客户端(浏览器)端进行调用,那么您需要将数据作为查询字符串参数传递 - 例如 TreeLoader.ashx?searchString=data 并在 ashx 中将其用作 context.Request["searchString"]

    【讨论】:

    • 我无法从 aspx 页面获取 server.transfer 以转移到 ashx 页面。我收到错误 - 执行子请求时出错。
    • @MoizTankiwala,也许您的 ashx 路径错误,或者您的 ashx 中可能存在未处理的异常,或者您的 aspx 页面和 ashx 驻留在不同的应用程序中(相同的网站但不同的应用程序)!跨度>
    • aspx 和 ashx 文件是同一个文件夹位置的同级文件。我只需在浏览器中输入 URL 即可调用 ashx。
    • @MoizTankiwala,你得到的例外是什么?您可以尝试将 server.transfer 调用包装在 try-catch 块中 - 忽略 ThreadAbortException 并记录任何其他异常以获取更多详细信息,包括堆栈跟踪!
    • Idk 如果是较新版本中的 .net 更改,但使用 .NET framework 4.5 我需要编写 HttpContext 如下:HttpContext.Current.Application["my_key"] = my_value;
    【解决方案2】:

    您如何从 .aspx.cs 调用树处理程序?我认为它将与“TreeLoader.ashx?passedVariable=hello”相同,例如:Response.Redirect("TreeLoader.ashx?passedVariable=hello")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-23
      相关资源
      最近更新 更多