2010-04-03 18 views
30

otrzymuję następujący błądDatabinding metody, takie jak eval(), XPath() i bind() może być używana tylko w kontekście regulacji z danymi

metody wiązania z danymi takimi jak eval(), XPath() i Bind() mogą być używane tylko w kontekście kontroli danych.

ale wszystko staram się robić to wewnątrz formantu ASP.NET Repeater

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

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

Odpowiedz

42

Składnia jest

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

Można zrobić coś jak

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

aw twoim kodzie:

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

ładne, podoba mi się to rozwiązanie, ale to, co jest Container.DataItem. Podczas wyszukiwania odpowiedzi w Internecie natknąłem się na to również, ale nie mogę wydawać się odwoływać w moim projekcie dzięki za odpowiedź – Dan

+0

Fajne, które działało ... użyłem następującego Dan

+0

Tak, możesz pominąć Container.DataItem, zobacz http://msdn.microsoft.com/en-us/library/system.web.ui. databinder.eval.aspx – Steve

28

Alternatywą jest taka:

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

Wtedy nie ma potrzeby kod.

+0

Działa świetnie. Możesz nawet użyć tego zamiast instrukcji If. Po prostu umieść dwie kontrolki z parametrami widocznymi dla jednego jako ==, a drugim jako! = (Lub czymkolwiek jesteś logicznym) – Ruan

1

Innym sposobem wdrożenia go:

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

Jest zbyt późno, ale chciałbym odpowiedzieć mi na drodze, co kiedyś osiągnąć go:

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

Teraz będzie to tylko pokaz przycisk obrazu, jeśli wiadomość jest równa nazwie użytkownika.

To może pomóc każdemu innemu w tej samej sytuacji.

W mojej sytuacji musiałem sprawdzić zerową i pusty ciąg ... więc realizowane tak poniżej:

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

Dzięki