我想在我的一个Grid-view列中有一个条件,它可能包含一个数字字符串(6-10位)或字符(3-6)。类似的东西:
<asp:HyperLink ID="HL_Number" runat="server" Text='<%# Eval("Code")%>' Target="_blank"
NavigateUrl='<%# "http://www.address.com/" + Eval("Code")%>'> Visible='<% (IsNumber(Eval("Code"))==true)? true:false %>'
</asp:HyperLink>
<br />
<asp:HyperLink ID="HL_String" runat="server" Text='<%# Eval("Code")%>' Target="_blank"
NavigateUrl='<%# "~/PDF/" + Eval("Code")+"pdf" %>' Visible='<% (IsNumber(Eval("Code"))==false)? true:false %>'>
</asp:HyperLink>
其中一个HyperLink必须同时可见,我该如何执行?在此先感谢。
答案 0 :(得分:0)
从良好的设计角度来看,将此逻辑移至您的业务层。让我们说这是你的实体
public class MyEntity
{
public int Id {get;set;}
// ... some other properties
public string Code {get;set;}
// if you need some other control to be visible based on
// whether Code is a number or not, use this to bind to Visible property.
// Note, this is not required in case of HyperLink
public bool IsVisible
{
{ get {return IsNumber(Code); }
}
public string NavigateUrl
{
get { return GetUrl(Code); }
}
private bool IsNumber(string code) { // your method body here }
private string GetUrl(string code)
{
if(!IsNumber(code))
{
return string.Format("~/PDF/{0}pdf", code);
}
return string.Format("http://www.address.com/{0}",code);
}
}
假设您的数据源是MyEntity对象的集合。
var dataSource = // some method that returns collection of MyEntity objects,
// for example List<MyEntity>
myGridView.DataSource = dataSource;
myGridView.DataBind();
现在,在GridView中只保留1个HyperLink
控件并将其绑定到相应的属性。
<asp:HyperLink ID="HL_String" runat="server" Text='<%# Eval("Code")%>' Target="_blank"
NavigateUrl='<%# Eval("NavigateUrl") %>'>
</asp:HyperLink>