1

gridview テンプレートの一部として asp:hyperlink コントロールがあります。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"
4

2 に答える 2

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") %>'
于 2012-06-17T14:23:05.480 に答える
0

やるべきことがたくさんある場合は、コード ビハインドで関数を使用して呼び出し、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();
}
于 2012-06-17T09:44:56.540 に答える