【问题标题】:ASPX SelectParameters From aspx.vb Code BehindASPX SelectParameters 来自 aspx.vb 代码背后
【发布时间】:2021-09-03 13:00:28
【问题描述】:

我使用的是 ASP Classic 2.0,所以我知道其中一些代码有点过时,但它是我继承的。我正在尝试在选择查询中使用我的支持 aspx.vb 页面中的变量。

我有以下查询(截断)

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConflictDetection="CompareAllValues"
            ConnectionString="Data Source=.;Initial Catalog=dataSQL;Persist Security Info=True;User ID=user;Password=$$$$"
            ProviderName="System.Data.SqlClient"

            SelectCommand="SELECT ClID, Client_Name
            FROM [tblClient]
            WHERE (tblClient.ClID = @ClID )"
            <SelectParameters>
              <asp:ControlParameter ControlID="DropDownList1" Name="ClID" PropertyName="SelectedValue"
              Type="Int32" />
            </SelectParameters>
</asp:SqlDataSource>

我想用支持此 aspx 页面的 aspx.vb 中的变量替换 ControlParameter。

我知道我可以访问该变量,因为 &lt;%=ClID%&gt; 生成了正确的 ID,但添加一些东西 .Add("ClID", DbType.Guid, clID) 不起作用。

我猜有一个简单的方法可以做到这一点。

如果它需要是一个控件,我想我可以将 ClID 绑定到表单控件,但我无法找出正确的语法。

谢谢,

史蒂夫

【问题讨论】:

  • 当您看到 ASP Classic 时,它指的是 pre-.Net vbscript Active Server Pages,而不是 asp.net web 表单。

标签: asp.net vb.net webforms ado.net


【解决方案1】:

首先,对于&lt;%=CLID%&gt; 注释,请记住&lt;%= 只是Response.Write() 的简写,这意味着结果只会写入呈现给浏览器的最终html 中。 它不会也永远不会将值插入到 aspx 标记中。

不过,.Add() 代码是在正确的轨道上,但我们仍需要进行两次调整。

首先,在 aspx 标记中使用 &lt;asp:Parameter 而不是 &lt;asp:ControlParameter

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConflictDetection="CompareAllValues"
            ConnectionString="Data Source=.;Initial Catalog=dataSQL;Persist Security Info=True;User ID=user;Password=$$$$"
            ProviderName="System.Data.SqlClient"

            SelectCommand="SELECT ClID, Client_Name
            FROM [tblClient]
            WHERE tblClient.ClID = @ClID"
            <SelectParameters>
              <asp:Parameter Name="ClID" DbType="Int32" />
            </SelectParameters>
</asp:SqlDataSource>

然后,在 aspx.vb 代码隐藏而不是 .Add() 中,您必须记住参数已经存在。如果您尝试再次添加它,您将得到一个例外。相反,您需要为代码隐藏中的现有参数设置Value

SqlDataSource1.SelectCommand.Parameters["ClID"].Value = ClID

我已经很久没有使用这样的代码了,所以您可能还需要致电.DataBind()

【讨论】:

  • 谢谢。我尝试了&lt;SelectParameters&gt; &lt;asp:Parameter SqlDataSource1.SelectCommand.Parameters["ClID"].Value = "ClID" /&gt; &lt;/SelectParameters&gt; 并收到此错误“文本内容('')在 'System.Web.UI 中是不允许的.WebControls.ParameterCollection'。”。在 Visual Studio 中,我看到“验证 (ASP.Net):属性名称后必须跟等号 (=) 和一个值。”这是在 SqlDataSource2.SelectCommand.Parameters 下。我将引号添加到 = "ClID" 但我不确定还有什么引号。
  • @skessler-Grupp 设置值必须从后面的代码中完成。如果您希望它依赖于变量名,则不能在标记中执行此操作。特别是对于&lt;%=CLID%&gt;,请记住&lt;%= 只是Response.Write() 的简写,这意味着结果只会写入呈现给浏览器的最终html。 它不会也永远不会将值插入到 aspx 标记中。
  • 嗯...将最后一部分推广到答案中。
  • 感谢您对我的耐心等待。我是 ASP/VB 的新手。我在问题中包含的带有 ASP: 标签的代码块位于 aspx 页面标记中。我认为我可以将其推送到我拥有的 aspx.vb 代码中,但现在查询位于标记中的标记中。我很抱歉,但我不确定你在几个小时前的评论中指的是什么。非常感谢您的帮助!老实说,我 18 年前在拼贴中做过一些 VB,但我什么都不记得了 :)
  • 尽量保持 aspx 标记在问题中的样子。唯一的区别是转换为asp:Parameter 而不是asp:ControlParameter。答案的另一部分位于 aspx.vb 代码隐藏中。更新了帮助的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-07
  • 1970-01-01
  • 2014-11-18
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多