2010-04-03 77 views
30

estoy recibiendo el siguiente errormétodos de enlace de datos tales como Eval(), XPath(), y bind() sólo se pueden utilizar en el contexto de un control de enlace de datos

métodos de enlace de datos tales como Eval(), XPath() y Bind() solo se pueden usar en el contexto de un control de datos.

pero todo lo que estoy tratando de hacer es dentro de un control ASP.NET REPETIDOR

<% if (Eval("Message").ToString() == HttpContext.Current.Profile.UserName) %> 
<% { %> 

      <asp:ImageButton runat="server" etc.... /> 
<% } %> 

Respuesta

42

La sintaxis es

<%# Eval("...") %> 

Usted podría hacer algo como

<asp:ImageButton Visible='<%# ShowImg(Eval(Container.DataItem,"Message")) %>' /> 

y en su código detrás:

boolean ShowImg(string msg) 
{ 
    return (msg == HttpContext.Current.Profile.UserName); 
} 
+0

agradable, me gusta esa solución pero lo que es Container.DataItem. Mientras buscaba una respuesta en línea, me encontré también pero no puedo verla en mi proyecto gracias por la respuesta – Dan

+0

Genial que funcionó ... utilicé el siguiente Dan

+0

Sí, puede omitir el Container.DataItem, consulte http://msdn.microsoft.com/en-us/library/system.web.ui. databinder.eval.aspx – Steve

28

Una alternativa es la siguiente:

<asp:ImageButton runat="server" Visible='<%# Eval("Message").ToString() == HttpContext.Current.Profile.UserName %>' /> 

entonces no hay necesidad de código subyacente.

+0

Funciona bien. Incluso puede usar esto en lugar de una instrucción If. Simplemente ponga dos de esos controles con los parámetros Visibles para uno como == y el otro como! = (O lo que sea que su lógica sea) – Ruan

1

Otra manera de ponerlo en práctica:

public string nonImage() { 
    string imgTag = "", Article_OwnerID = "", Article_ID = "", Article_OwnerType = "", imgSrc = ""; 
    DataTable DtArticles = SE_Article.GetArticlesList(UserID, UserID, ProfileType, CounterOfPage, CountPerPage, (short) SE_Action.OwnerType.user, SE_Security.CheckInjection(TxtSearch.Text.Trim()), CategoryID, "all_articles", DrpOrderBy.SelectedValue, DrpSort.SelectedValue); 
    if (DtArticles != null && DtArticles.Rows.Count > 0) { 
     Article_OwnerID = DtArticles.Rows[0]["Article_OwnerID"].ToString(); 
     Article_ID = DtArticles.Rows[0]["Article_ID"].ToString(); 
     Article_OwnerType = DtArticles.Rows[0]["Article_OwnerType"].ToString(); 
    } 
    if (SE_Article.GetArticleCover(Convert.ToInt32(Article_OwnerID), Convert.ToInt32(Article_ID), Convert.ToInt16(Article_OwnerType)) != System.Configuration.ConfigurationManager.AppSettings["NoPhotoArticleThumb"]) { 
     imgSrc = SE_Article.GetArticleCover(Convert.ToInt32(Article_OwnerID), Convert.ToInt32(Article_ID), Convert.ToInt16(Article_OwnerType)); 
     imgTag = "<img class='img_article_cover' src='" + imgSrc + "' alt='مقاله" + Article_ID + "' />"; 
    } 
    return imgTag; 
} 


<% nonImage(); %> 
2

que sea demasiado tarde, pero me gustaría responder a mi manera, lo he usado para lograrlo:

<%# Eval("Message").toString()== HttpContext.Current.Profile.UserName)?"<asp:ImageButton runat="server" etc.... />" :""%> 

Ahora bien, esto sólo se muestran botón de imagen si Mensaje es igual a nombre de usuario.

Esto podría ayudar a cualquier otro en la misma situación.

En mi situación que necesitaba para comprobar cadena nula y vacía ... así que implementa de la siguiente continuación:

<%# Eval("DateString")!= null && Eval("DateString")!= ""? "<span class='date'>"+Eval("DateString") + "</span>":"" %> 

Gracias

Cuestiones relacionadas