【问题标题】:How to replace a codebehind method with an aspx method using ternary operator如何使用三元运算符将代码隐藏方法替换为 aspx 方法
【发布时间】:2012-06-17 00:28:55
【问题描述】:

我有一个 asp:hyperlink 控件作为 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"

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    当你有很多想法时,最好在代码后面使用一个函数来调用,并避免因一行代码的困难而产生的问题和错误。所以你把函数称为:

    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();
    }
    

    【讨论】:

      【解决方案2】:

      你使用的方法更干净,我更喜欢。

      我复制了你的问题,我认为你只是有一个额外的右括号

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

      【讨论】:

        猜你喜欢
        • 2013-06-17
        • 2012-09-27
        • 2011-11-12
        • 1970-01-01
        • 1970-01-01
        • 2021-08-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多