如何使用三元运算符用aspx方法替换方法后面的代码

时间:2012-06-17 00:28:56

标签: c# asp.net

我有一个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"

2 个答案:

答案 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") %>'