html标记值的字符串表达式

时间:2011-10-28 18:36:14

标签: c# asp.net sqldatasource string-concatenation

我正在定义一个数据源(用于可排序的列表视图)并且有一个小问题。

与此类似的代码:

<asp:SqlDataSource ID="myDataSource" runat="server"
  SelectCommand="SELECT [aField], [bField]  FROM Suggestions WHERE stype = 'X'"
  ConnectionString="<%$ ConnectionStrings:dbConnectionString %>" >
</asp:SqlDataSource>

但真正的选择字符串要复杂得多,我想做这样的事情:

<asp:SqlDataSource ID="myDataSource" runat="server"
  SelectCommand="SELECT [aField], [bField]  " +
                     "FROM Suggestions WHERE stype = 'X'"
  ConnectionString="<%$ ConnectionStrings:dbConnectionString %>" >
</asp:SqlDataSource>

我搜索过这些术语的不同变体:    concatentation catenation string tag html asp.net

但我找不到任何关于它的内容,虽然看起来它需要字符串文字而不是字符串表达式。所以我最终将这整个复杂的函数定义为数据库中的一个函数,但是现在我想尝试类似的东西:

<asp:SqlDataSource ID="myDataSource" runat="server"
  SelectCommand="<% qry_str('X'); %>"
  ConnectionString="<%$ ConnectionStrings:dbConnectionString %>" >
</asp:SqlDataSource>

其中qry_str()在代码后面定义;但是,该特定代码不起作用:

代码隐藏定义为:

protected string qry_str(string t)
{
    string s =
    "SELECT [aField], [bField]  " +
             "FROM Suggestions WHERE stype = '" + t + "'";
    return "s";
}

我不认为背后的代码是问题所在。我认为这是asp.net和我称之为的方式。做我正在做的事情的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以在某个页面事件处理程序中设置此属性(更适合您的工作流程)。例如,在Page_Load:

protected void Page_Load(object sender, EventArgs e)
{
    string t = "X"; // calculate t here
    myDataSource.SelectCommand = "SELECT [aField], [bField] FROM Suggestions WHERE stype = " + t;
    // other actions
}

答案 1 :(得分:1)

您似乎试图将ASPX视为C#。如果您添加了&lt; %%&gt;标记,您应该能够使用C#连接语法:

<asp:SqlDataSource ID="myDataSource" runat="server" 
                   SelectCommand='<% ="SELECT [aField], [bField] " +
                                      "  FROM suggestions        " +
                                      " WHERE sType='X'          " %>' 
                   ConnectionString="<%$ ConnectionStrings:dbConnectionString %>" > 
</asp:SqlDataSource> 

你可能会在引号内引用“引号”中遇到麻烦 - 所以你可能最终不得不接受安德烈的回答。