我有一个asp:超链接控件作为gridview模板的一部分。 aspx页面中的代码如下:
asp:HyperLink runat="server" ID="lnkEdit" ToolTip="Edit article" NavigateUrl='<%# GetUrl(Eval("ID").ToString(), Eval("CategoryID").ToString()) %>' ImageUrl="~/Images/Edit.gif"
NavigateUrl值是从代码隐藏方法GetUrl(string,string)获得的。代码工作正常,如下:
protected string GetUrl(string id, string categoryID)
{
var CategoryID = string.Empty;
if (!String.IsNullOrEmpty(Request.QueryString["CatID"]))
{
CategoryID = Request.QueryString["CatID"].ToString();
}
else if (!String.IsNullOrEmpty(categoryID))
{
CategoryID = categoryID;
}
return "~/TBSArticles/WriteOrEditArticle.aspx?ID=" + id + "&CatID=" + CategoryID;
}
我想在aspx页面中使用三元运算符替换方法背后的代码。我尝试了类似下面的内容,但没有奏效:
asp:HyperLink runat="server" ID="lnkEdit" ToolTip="Edit article" NavigateUrl='<%# "~/TBSArticles/WriteOrEditArticle.aspx?ID=" + Eval("ID") + "&CatID=" + Eval(this.Request.QueryString["CatID"].ToString()) != ""? this.Request.QueryString["CatID"] : Eval("CategoryID")) %>' ImageUrl="~/Images/Edit.gif"
答案 0 :(得分:0)
当你有很多想法做的事情时,最好在后面的代码上使用函数来调用,并避免一线代码难以解决的问题和错误。所以你把这个函数称为:
asp:HyperLink runat="server" NavigateUrl='<%#GetHyperLinkUrl(Container.DataItem)%>' ID="lnkEdit" ToolTip="Edit article"
将其写在后面的代码上
protected string GetHyperLinkUrl(object oItem)
{
StringBuilder cbRet = new StringBuilder();
cbRet.Append( Page.ResolveUrl("~/TBSArticles/WriteOrEditArticle.aspx?ID=") );
cbRet.Append( DataBinder.Eval(oItem, "ID") );
cbRet.Append( "&CatID=" );
if(string.IsNullOrEmpty(Request.QueryString["CatID"]))
cbRet.Append( DataBinder.Eval(oItem, "CategoryID") );
else
cbRet.Append( DataBinder.Eval(oItem, Request.QueryString["CatID"].ToString()) );
return cbRet.ToString();
}
答案 1 :(得分:0)
您使用的方法更清晰,我更喜欢。
我复制了你的问题,我认为你只有一个额外的结束括号
NavigateUrl='<%# "~/TBSArticles/WriteOrEditArticle.aspx?ID=" + Eval("ID") + "&CatID=" + Eval(this.Request.QueryString["CatID"].ToString()) != ""? this.Request.QueryString["CatID"] : Eval("CategoryID")) %>'
更正:删除了最后一个Eval(“CategoryID”)括号
NavigateUrl='<%# "~/TBSArticles/WriteOrEditArticle.aspx?ID=" + Eval("ID") + "&CatID=" + Eval(this.Request.QueryString["CatID"].ToString()) != ""? this.Request.QueryString["CatID"] : Eval("CategoryID") %>'