阻止控件将数据绑定到 ObjectDataSource?
我有一个页面需要一个数字查询字符串值。 例如:
Details.aspx?rgn=1234
此页面上有一个
,它数据绑定到
。 数据源看起来像这样:
<asp:ObjectDataSource ID="ObjectRegion" runat="server" SelectMethod="GetRegions" TypeName="Region">
<SelectParameters>
<asp:QueryStringParameter Name="RegionID" QueryStringField="rgn" Type="Int32" DefaultValue='0' />
</SelectParameters>
</asp:ObjectDataSource>
由于这是一个公共页面,有时黑客/搜索引擎/好奇的人会向我传递非数字值。 我在 Page_Load 中验证了这一点。 像这样的事情:
protected void Page_Load(object sender, EventArgs e)
{
int RegionID;
string strRegion = Request.QueryString["rgn"];
if(string.IsNullOrEmpty(strRegion) || !int.TryParse(strRegion, out RegionID))
{
// setup permanent redirect
return;
}
}
问题是我的中继器仍然进行数据绑定,这会导致 [FormatException: 输入字符串的格式不正确。]
...这是我想阻止的事情。 有什么简单的方法来解决这个问题吗?
I have a page which expects a numeric query string value. For example:
Details.aspx?rgn=1234
On this page is an <asp:repeater>
which is databound to an <asp:objectdatasource>
. The datasource looks something like this:
<asp:ObjectDataSource ID="ObjectRegion" runat="server" SelectMethod="GetRegions" TypeName="Region">
<SelectParameters>
<asp:QueryStringParameter Name="RegionID" QueryStringField="rgn" Type="Int32" DefaultValue='0' />
</SelectParameters>
</asp:ObjectDataSource>
Since this is a public page, sometimes I get passed a non-numeric value by hackers / search engines / curious folks. I validate this in my Page_Load. Something like this:
protected void Page_Load(object sender, EventArgs e)
{
int RegionID;
string strRegion = Request.QueryString["rgn"];
if(string.IsNullOrEmpty(strRegion) || !int.TryParse(strRegion, out RegionID))
{
// setup permanent redirect
return;
}
}
The problem is that my repeater still does its databinding anyway which causes a [FormatException: Input string was not in a correct format.]
... which is something I want to prevent. Any ideas of a simple way to get around this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我回答了我自己的问题。 我忘记在永久重定向上添加 Response.End() :
I answered my own question. I forgot to add a
Response.End()
on the permanent redirect: