是否可以从 aspx 文件的 Request.QueryString 中检索 ID 值并将其传递到 ascx 文件,以便使用检索到的 ID 成功更新配置文件?
4 回答
通常,如果某物在 UserControl 中,要么是因为控件中的功能足够重要,以至于可以分解到它自己的可重用容器中,该容器可以在另一个页面上重用。如果该控件实际上要在另一个页面上重用,它真的不应该引用查询字符串参数,因为该控件不应该对它所在的页面做出任何假设。如果该控件包含在查询字符串参数名称不同的另一个页面上怎么办?或者也许在另一个页面上,该值将来自数据库或 ViewState,或者会以某种方式自动确定?所以我的一般规则是,如果你要制作一个 UserControl,永远,永远永远不要对它所在的页面做出任何假设。
所以就像大多数人所说的那样,您仍然可以从 UserControl 内部访问 Request.QueryString 属性,但这可能不是最好的主意。在由容器页面设置的控件上创建一个属性是一个更好的主意。
在我看来,最好的想法,也是我几乎总是做的,是在控件上创建名为 LoadData(或类似的东西)的方法,并为您需要的所有查询字符串值提供参数。这样一来,您就有了该数据的单一入口点,因此很清楚这些值在什么时候被设置以及它们被设置为什么。如果你走属性路线,总是担心是否所有的属性都设置好了,以及它们是否设置在页面生命周期的正确位置(在回发期间会变得很棘手)
在您的aspx
页面、ascx
用户控件、母版页、自定义控件以及几乎任何地方,您都可以访问查询字符串。使用以下方法之一:
- 通过以下方式直接访问用户控件内的查询字符串
Page.Request.QueryString
- 在您的用户控件中创建一个属性,然后在您的页面中,强制转换您的用户控件以获取对该属性的引用并设置该属性。然后在您的用户控件中,使用该属性。
- 在 ASP.NET 环境中的任何地方,通过
HttpContext.Current.Request
您可以从 UserControl 的代码隐藏中访问 Request.QueryString 集合。
您可以将查询字符串值作为 ascx 控件的属性传递,例如:
<cc:myControl id="myControl" runat="server" myValue='<%=request.querystring("id")' />
然后在自定义控件的代码中,在您的类中添加以下内容:
Public myValue as String