2010-04-27 25 views
5

que tienen este control de usuario:pasar parámetros a un control de usuario - asp.net

<user:RatingStars runat="server" product="<%= getProductId() %>" category="<%= getCategoryId() %>"></user:RatingStars> 

Se puede ver que cumplimento el producto y categoría llamando dos métodos:

public string getProductId() 
{ 
    return productId.ToString(); 
} 

public string getCategoryId() 
{ 
    return categoryId.ToString(); 
} 

I No entiendo por qué, en el control de usuario, cuando tomo los datos recibidos (producto y categoría) me da "<% = getProductId()%>" en lugar de dar la identificación recibida de ese método ...

Cualquier ayuda sería muy apreciada ... amablemente

Editar: Resuelto con: producto = '<% # getProductId()%>'

último problema: en el control de usuario tengo esto:

public string productId; 
public string product 
{ 
    get 
    { 
     return productId; 
    } 
    set 
    { 
     productId = value; 
    } 
} 

por lo tanto, espero que el productID está configurado bien en el control de usuario. Lamentablemente es nulo cuando intento usarlo ...

¿Hay algo que haya escrito que sea incorrecto?

+0

¿Ha intentado configurar productId en algo en decir su método principal? – 5arx

+0

Recuerde llamar 'DataBind();' en algún lugar de la página que aloja el control ... En 'product =" <% # something> "', el # significa que es una expresión de enlace de datos. En realidad, no llamará 'algo' hasta que llame a 'DataBind()' ... Comúnmente en 'PageLoad()' alojando el control. – Jon

Respuesta

7

lo que se obtiene en tiempo de compilación de cheques, usted puede dar a su usuario controle un ID y luego establecer sus propiedades Product y Category en C# como esto:

ASPX:

<user:RatingStars id="myUserControlID" runat="server" Product="<%= getProductId() %>" Category="<%= getCategoryId() %>"></user:RatingStars> 

CS:

myUserControlID.Product = GetProductId(); 
myUserControlID.Category = GetCategoryId(); 

Además, como dice 5arx, una vez que haya rellenado eso, al actualizar su página se volverá a cargar el control y perderá los ID Product y Category. Se puede controlar que mediante el uso de las propiedades ViewState en el control de usuario, de esta manera:

private const string ProductKey = "ProductViewStateKey"; 
public string Product 
{ 
    get 
    { 
     if (ViewState[ProductKey] == null) 
     { 
       // do whatever you want here in case it's null 
       // throw an error, return string.empty or whatever 
     } 
     return ViewState[ProductKey].ToString(); 
    } 

    set 
    { 
     ViewState[ProductKey] = value; 
    } 
} 

NOTA: He actualizado la carcasa nombre de la propiedad para seguir la convención, ya que tiene más sentido para mí que ¡camino! Personalmente, siempre sufijo los ID con ID (p. Ej .: ProductID) para distinguirlo de una propiedad que contiene un objeto Product. Lea más acerca de los estándares de codificación aquí: Are there any suggestions for developing a C# coding standards/best practices document?

1

¿Desea publicar algo más de su código?

Un par de cosas:

  • productId es una referencia de objeto (a un objeto string) que significa:

  • a menos que escribir un código intialisation a 'llenar' con una cadena de referencia al principio, será null.

  • si crea una cadena, p. string x = new String() x será una cadena vacía , que se puede considerar como "" sin las comillas. (Es es una cadena, pero está vacía porque no tiene caracteres).

  • puede escribir return productId; - sin necesidad de llamar al ToString() en una cadena.

  • Su página no tiene un mecanismo listo para usar para almacenar variables en las devoluciones. Necesitará usar ViewState o campos de formulario ocultos para hacer esto.
Cuestiones relacionadas