【问题标题】:Bind a code-behind method to hyperlink in gridview将代码隐藏方法绑定到gridview中的超链接
【发布时间】:2015-10-21 18:03:01
【问题描述】:

我想根据其类别将用户重定向到单击的 UserId 的个人资料页面。我有如下代码隐藏方法:

  protected void GetProfile(string UserId)
{
    string CS = ConfigurationManager.ConnectionStrings["ss"].ConnectionString;
    using (SqlConnection con = new SqlConnection(CS))
    {
        con.Open();
        SqlCommand cmd = new SqlCommand("Select Category from tblAllUsers where UserId=@UserId", con);
        cmd.Parameters.AddWithValue("@UserId", UserId);
        string category = (string)cmd.ExecuteScalar();
        if (category == "Player")
        {
            Response.Redirect("~/Profile-Player.aspx?UserId=" + UserId);
        }
        else
        {
            Response.Redirect("~/Profile-Doctor.aspx?UserId=" + UserId);
        }
    }
}

我希望在单击位于 gridview 内的超链接时调用上述方法,如下所示:

  <asp:HyperLink ID="lblCreator" runat="server" NavigateUrl='<%# GetProfile(Eval("UserId")) %>' Text='<%#String.Format("{0} {1}",Eval("FirstName"),Eval("LastName"))%>'></asp:HyperLink>

但它会引发一些异常,例如

1.Error 14 参数 1:无法从 'object' 转换为 'string'
2.Error 13 'Home.GetProfile(string)' 的最佳重载方法匹配有一些无效参数 3.Error 15 'System.Convert.ToString(object, System.IFormatProvider)' 的最佳重载方法匹配有一些无效参数 4.Error 16 Argument 1: cannot convert from 'void' to 'object'

好吧,我不明白。我什至没有从该方法返回任何东西

【问题讨论】:

    标签: c# asp.net gridview eval


    【解决方案1】:

    如果UserId在您的数据源中由字符串表示,则Eval返回一个对象,您需要将其转换为字符串:

    NavigateUrl='<%# GetProfile(Eval("UserId") as string) %>'
    

    另一个问题是Response.Redirect 不返回任何内容,而 oyu 想要返回 URL。因此,只需删除此重定向并按原样返回 URl。也不要忘记更改方法的返回类型。

    protected string GetProfile(string UserId)
    ...
        if (category == "Player")
        {
            return "~/Profile-Player.aspx?UserId=" + UserId;
        }
        else
        {
            return "~/Profile-Doctor.aspx?UserId=" + UserId;
        }
    

    还有一些注意事项:

    1. 此函数GetProfile 在数据绑定期间调用,而不是在单击链接时调用。如果您确实希望在单击链接时调用某些内容,则需要一个 LinkBut​​ton 来生成网格视图命令,然后进行处理。但是,您当前的解决方案也应该可以工作。

    2. 当前代码将为每个超链接建立数据库连接。考虑向您的 gridview 的数据源添加更多信息,例如用户类型,以便您可以一次性从数据库中获取所有数据。

    【讨论】:

      猜你喜欢
      • 2011-04-09
      • 2011-06-10
      • 2013-01-16
      • 2012-07-15
      • 2011-08-06
      • 1970-01-01
      • 2013-04-28
      • 1970-01-01
      • 2016-05-21
      相关资源
      最近更新 更多