2009-05-14 7 views
0

J'ai une page qui attend une valeur de chaîne de requête numérique. Par exemple:Empêche un contrôle de liaison de données à un objet ObjectDataSource?

Details.aspx?rgn=1234 

Sur cette page est un <asp:repeater> qui est DataBound à un <asp:objectdatasource>. La source de données ressemble à ceci:

<asp:ObjectDataSource ID="ObjectRegion" runat="server" SelectMethod="GetRegions" TypeName="Region"> 
    <SelectParameters> 
    <asp:QueryStringParameter Name="RegionID" QueryStringField="rgn" Type="Int32" DefaultValue='0' /> 
    </SelectParameters> 
</asp:ObjectDataSource> 

Depuis c'est une page publique, parfois je suis passé d'une valeur non numérique par les pirates/moteurs de recherche/gens curieux. Je valide ceci dans mon Page_Load. Quelque chose comme ceci:

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; 
    } 
} 

Le problème est que mon répéteur fait encore son databinding de toute façon qui provoque une [FormatException: Input string was not in a correct format.] ... ce qui est quelque chose que je veux éviter. Des idées d'un moyen simple de contourner cela?

Répondre

0

J'ai répondu à ma propre question. J'ai oublié d'ajouter un Response.End() sur la redirection permanente:

Response.Status = "301 Moved Permanently"; 
Response.AddHeader("Location",URL); 
Response.End(); 
Questions connexes