QueryStringParameter (Clase)
Actualización: noviembre 2007
Enlaza el valor de un campo de cadena de consulta de solicitud HTTP a un objeto de parámetro.
Ensamblado: System.Web (en System.Web.dll)
[AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] public class QueryStringParameter : Parameter
/** @attribute AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal) */ /** @attribute AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal) */ public class QueryStringParameter extends Parameter
public class QueryStringParameter extends Parameter
Puede utilizar la clase QueryStringParameter para enlazar el valor de un campo que se pasa como parte de una cadena de consulta de solicitud HTTP a un parámetro que se utiliza en una consulta o un comando con parámetros. El campo se recupera de la colección QueryString.
Es posible que los controles que enlazan datos al parámetro produzcan una excepción si se hace referencia a un objeto QueryStringParameter pero no se pasa el par nombre/valor de cadena de consulta correspondiente. De forma similar, es posible que no muestren ningún dato si se pasa el nombre del campo de cadena de consulta sin un valor correspondiente. Para evitar estas situaciones, establezca la propiedad DefaultValue donde proceda.
La clase QueryStringParameter proporciona la propiedad QueryStringField, que identifica el nombre del valor de cadena de consulta al que se va a enlazar. También proporciona las propiedades heredadas de la clase Parameter.
Nota importante: |
|---|
La clase QueryStringParameter no valida el valor que se pasa; proporciona el valor original. Sin embargo, se puede validar el valor de un objeto QueryStringParameter en un control de origen de datos. Para ello, controle el evento Selecting, Updating, Deleting o Inserting del control de origen de datos y compruebe el valor de parámetro en el controlador de eventos. Si el valor del parámetro no supera las pruebas de validación, se puede cancelar la operación de datos estableciendo la propiedad Cancel de la clase CancelEventArgs asociada en true. |
En el ejemplo siguiente se muestra cómo crear un objeto QueryStringParameter para utilizarlo como filtro al mostrar datos en un control GridView. Agregue el objeto QueryStringParameter a la colección FilterParameters del control AccessDataSource . El objeto de parámetro enlaza el valor del campo de cadena de consulta denominado country a su cadena FilterExpression. Dado que no hay ninguna propiedad DefaultValue especificada para el parámetro, si no se pasa ningún campo denominado country con la cadena de consulta, el control AccessDataSource produce una excepción NullReferenceException. Si se pasa un campo denominado country pero dicho campo no tiene ningún valor, el control GridView no muestra ningún dato.
<%@ Page language="C#"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>ASP.NET Example</title> </head> <body> <form id="Form1" method="post" runat="server"> <!-- Use a Query String with country=USA --> <asp:gridview id ="GridView1" runat="server" datasourceid="MyAccessDataSource" /> <!-- Security Note: The AccessDataSource uses a QueryStringParameter, Security Note: which does not perform validation of input from the client. --> <asp:accessdatasource id="MyAccessDataSource" runat="server" datafile="Northwind.mdb" selectcommand="SELECT EmployeeID, LastName, Address, PostalCode, Country FROM Employees" filterexpression="Country = '{0}'"> <filterparameters> <asp:querystringparameter name="country" type="String" querystringfield="country" /> </filterparameters> </asp:accessdatasource> </form> </body> </html>
<%@ Page language="VJ#"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>ASP.NET Example</title>
</head>
<body>
<form id="Form1" method="post" runat="server">
<!-- Use a Query String with country=USA -->
<asp:GridView
id ="GridView1"
runat="server"
DataSourceID="MyAccessDataSource" />
<asp:AccessDataSource
id="MyAccessDataSource"
runat="server"
DataFile="Northwind.mdb"
SelectCommand="SELECT EmployeeID, LastName, Address, PostalCode, Country FROM Employees"
FilterExpression="Country = '@country'">
<FilterParameters>
<asp:QueryStringParameter Name="country" Type="String" QueryStringField="country" />
</FilterParameters>
</asp:AccessDataSource>
</form>
</body>
</html>
En el ejemplo siguiente se muestra cómo crear un objeto QueryStringParameter para mostrar los datos de una base de datos de Access utilizando una consulta SQL parametrizada. El objeto AccessDataSource recupera registros que, a continuación, se muestran en un control GridView. El control GridView también es modificable y permite a los usuarios actualizar el estado de los pedidos en la tabla Orders de Northwind Traders.
<%@Page Language="C#" %> <%@Import Namespace="System.Data" %> <%@Import Namespace="System.Data.Common" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> private void UpdateRecords(Object source, EventArgs e) { // This method is an example of batch updating using a // data source control. The method iterates through the rows // of the GridView, extracts each CheckBox from the row and, if // the CheckBox is checked, updates data by calling the Update // method of the data source control, adding required parameters // to the UpdateParameters collection. CheckBox cb; foreach(GridViewRow row in this.GridView1.Rows) { cb = (CheckBox) row.Cells[0].Controls[1]; if(cb.Checked) { string oid = (string) row.Cells[1].Text; MyAccessDataSource.UpdateParameters.Add(new Parameter("date",TypeCode.DateTime,DateTime.Now.ToString())); MyAccessDataSource.UpdateParameters.Add(new Parameter("orderid",TypeCode.String,oid)); MyAccessDataSource.Update(); MyAccessDataSource.UpdateParameters.Clear(); } } } </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>ASP.NET Example</title> </head> <body> <form id="form1" runat="server"> <!-- Security Note: The SqlDataSource uses a QueryStringParameter, Security Note: which does not perform validation of input from the client. Security Note: To validate the value of the QueryStringParameter, handle the Selecting event. --> <asp:SqlDataSource id="MyAccessDataSource" runat="server" ProviderName="<%$ ConnectionStrings:MyPasswordProtectedAccess.providerName%>" ConnectionString="<%$ ConnectionStrings:MyPasswordProtectedAccess%>" SelectCommand="SELECT OrderID, OrderDate, RequiredDate, ShippedDate FROM Orders WHERE EmployeeID=?" UpdateCommand="UPDATE Orders SET ShippedDate=? WHERE OrderID = ?"> <SelectParameters> <asp:QueryStringParameter Name="empId" QueryStringField="empId" /> </SelectParameters> </asp:SqlDataSource> <asp:GridView id ="GridView1" runat="server" DataSourceID="MyAccessDataSource" AllowPaging="True" PageSize="10" AutoGenerateColumns="False"> <columns> <asp:TemplateField HeaderText=""> <ItemTemplate> <asp:CheckBox runat="server" /> </ItemTemplate> </asp:TemplateField> <asp:BoundField HeaderText="Order" DataField="OrderID" /> <asp:BoundField HeaderText="Order Date" DataField="OrderDate" /> <asp:BoundField HeaderText="Required Date" DataField="RequiredDate" /> <asp:BoundField HeaderText="Shipped Date" DataField="ShippedDate" /> </columns> </asp:GridView> <asp:Button id="Button1" runat="server" Text="Update the Selected Records As Shipped" OnClick="UpdateRecords" /> <asp:Label id="Label1" runat="server" /> </form> </body> </html>
<%@Page Language="VJ#" %>
<%@Import Namespace="System.Data" %>
<%@Import Namespace="System.Data.Common" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
private void UpdateRecords(Object source, System.EventArgs e)
{
// This method is an example of batch updating using a
// data source control. The method iterates through the rows
// of the GridView, extracts each CheckBox from the row and, if
// the CheckBox is checked, updates data by calling the Update
// method of the data source control, adding required parameters
// to the UpdateParameters collection.
CheckBox cb;
for (int iCtr = 0;
iCtr < this.GridView1.get_Rows().get_Count(); iCtr++) {
GridViewRow row = this.GridView1.get_Rows().get_Item(iCtr);
cb = (CheckBox)row.get_Cells().get_Item(0).get_Controls().get_Item(1);
if (cb.get_Checked()) {
String oid = (String)(row.get_Cells().get_Item(1).get_Text());
MyAccessDataSource.get_UpdateParameters().Add(new Parameter(
"date", System.TypeCode.DateTime, System.DateTime.get_Now().ToString()));
MyAccessDataSource.get_UpdateParameters().Add(new Parameter(
"orderid", System.TypeCode.String, oid));
MyAccessDataSource.Update();
MyAccessDataSource.get_UpdateParameters().Clear();
}
}
} //UpdateRecords
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>ASP.NET Example</title>
</head>
<body>
<form id="form1" runat="server">
<!-- Security Note: The SqlDataSource uses a QueryStringParameter,
Security Note: which does not perform validation of input from the client.
Security Note: To validate the value of the QueryStringParameter, handle the Selecting event. -->
<asp:SqlDataSource
id="MyAccessDataSource"
runat="server"
ProviderName="System.Data.OleDb"
ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\uncpath\Northwind_PasswordProtected.mdb;Mode=3;Jet OLEDB:Database Password=myPassword;"
SelectCommand="SELECT OrderID, OrderDate, RequiredDate, ShippedDate FROM Orders WHERE EmployeeID=?"
UpdateCommand="UPDATE Orders SET ShippedDate=? WHERE OrderID = ?">
<SelectParameters>
<asp:QueryStringParameter Name="empId" QueryStringField="empId" />
</SelectParameters>
</asp:SqlDataSource>
<asp:GridView
id ="GridView1"
runat="server"
DataSourceID="MyAccessDataSource"
AllowPaging="True"
PageSize="10"
AutoGenerateColumns="False">
<Columns>
<asp:TemplateField HeaderText="">
<ItemTemplate>
<asp:CheckBox runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="Order" DataField="OrderID" />
<asp:BoundField HeaderText="Order Date" DataField="OrderDate" />
<asp:BoundField HeaderText="Required Date" DataField="RequiredDate" />
<asp:BoundField HeaderText="Shipped Date" DataField="ShippedDate" />
</Columns>
</asp:GridView>
<asp:Button
id="Button1"
runat="server"
Text="Update the Selected Records As Shipped"
OnClick="UpdateRecords" />
<asp:Label id="Label1" runat="server" />
</form>
</body>
</html>
- AspNetHostingPermission
para trabajar en un entorno hospedado. Valor de petición: LinkDemand; valor de permiso: Minimal.
- AspNetHostingPermission
para trabajar en un entorno hospedado. Valor de petición: InheritanceDemand; valor de permiso: Minimal.
Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98
.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.
Nota importante: