我想处理从数据库中检索的字段,以便Gridview检查其中的信息是否是超链接。如果是,我想从中生成一个链接,否则只需将其保留为原始文本。目前,Gridview中的字段如下所示:
<asp:TemplateField HeaderText="Reference">
<EditItemTemplate>
<asp:TextBox ID="txtReference" runat="server" Text='<%# Bind("Reference") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("Reference") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
我尝试修改ItemTemplate的'Text'属性中的内容,但无论我放入什么,我都会在pageload上遇到错误。如何根据此字段中绑定的特定信息动态修改发送到浏览器的内容?
非常感谢!
答案 0 :(得分:2)
如果绑定文字符合条件,您可以在Label
中使用HyperLink
和TemplateField
并显示HyperLink
(并隐藏Label
)作为一个正确的URL。您可以使用代码隐藏函数执行此操作,该函数将bool返回到Visible
属性,如下所示:
<强> ASP.NET 强>
<asp:TemplateField HeaderText="Reference">
<ItemTemplate>
<asp:Label ID="lbl" runat="server" Visible='<%# IsTextHyperlink(Eval("Reference")) %>' Text='<%# Bind("Reference") %>'/>
<asp:HyperLink ID="hl" runat="server" Visible='<%# !IsTextHyperlink(Eval("Reference")) %>' NavigateUrl='<%# Bind("Reference") %>'/>
</ItemTemplate>
</asp:TemplateField>
<强> C#强>
protected bool IsTextHyperlink(object text)
{
bool IsHyperLink = false;
...
// check if text qualifies as hyperlink
...
return IsHyperLink ;
}
注意使用类型object
作为IsHyperLink函数参数,因为Eval()返回一个对象,只需将其强制转换为String。
您还希望将Text
的{{1}}属性格式化为有意义的内容。
答案 1 :(得分:1)
您可以使用{/ 3}}方法,例如
protected virtual void yourGV_OnRowDataBound(object sender, gridViewRowEventArgs e)
{
GridViewRow row = e.Row
}
在内部,您可以使用GridView.OnRowDataBound访问行中的控件。
答案 2 :(得分:0)
我在Label
中同时使用HyperLink
和TemplateField
来修复此问题,如果绑定显示HyperLink
(隐藏Label
)文本有资格作为正确的URL。
以下ASP.NET设置要输出的潜在HTML:
<强> ASP.NET 强>
<asp:TemplateField HeaderText="Reference">
<ItemTemplate>
<asp:Label ID="lblReference" runat="server" Visible='<%# !isTextHyperlink(Eval("Reference")) %>' Text='<%# Bind("Reference") %>'/>
<asp:HyperLink ID="hlReference" runat="server" Visible='<%# isTextHyperlink(Eval("Reference")) %>' Text='<%# Bind("Reference") %>' NavigateUrl='<%# Bind("Reference") %>'/>
</ItemTemplate>
</asp:TemplateField>
我在页面'codebehind'中添加了一个函数,如下所示:
<强> C#强>
protected bool isTextHyperlink(object refobj)
{
string refstring = refobj.ToString();
try
{
Uri uri = new Uri(refstring);
return Uri.CheckSchemeName(uri.Scheme);
}
catch
{
// not a valid uri (that Uri can construct with)
return false;
}
}
非常感谢Brissles提出的建议。