【问题标题】:ASP.NET Cannot find object in parameter ControlParameterASP.NET 在参数 ControlParameter 中找不到对象
【发布时间】:2016-10-08 01:19:24
【问题描述】:

我正在尝试从 DropDownList 中获取值作为 SQL 查询的参数。我有一个 GridView 和 SqlDataSource。而且我无法到达 GridView 内的 DropDownList ("DDLName")。当“DDLName”在 GridView 之外时,一切正常,但是当我把它放在里面时,我收到一个错误,提示找不到“DDLName”。我想在 .aspx 中执行此操作。我看到了很多使用“$”的提示,但我尝试使用“GridView1$DDLName”,但它不起作用。

这是我的代码:

     <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="id" DataSourceID="SqlDataSource2" AutoGenerateEditButton="True" ShowFooter="True">
        <Columns>
            <asp:BoundField DataField="id" HeaderText="id" ReadOnly="True" SortExpression="id" />
            <asp:BoundField DataField="firstname" HeaderText="firstname" SortExpression="firstname" />
            <asp:BoundField DataField="lastname" HeaderText="lastname" SortExpression="lastname" />
            <asp:TemplateField HeaderText="city">
                <ItemTemplate>
                    <asp:Label ID = "LabelName" runat="server" Text='<%# Eval("name") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:DropDownList ID = "DDLName" runat="server" DataSourceID="DDLSource" DataTextField="name" ClientIDMode="Static"></asp:DropDownList>
                </EditItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

    <asp:SqlDataSource ID="DDLSource" runat="server" ConnectionString="<%$ ConnectionStrings:MBase1ConnectionString %>" SelectCommand="SELECT [name] FROM [cities]">
    </asp:SqlDataSource>

    <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:MBase1ConnectionString %>" SelectCommand="users_select_all_city" SelectCommandType="StoredProcedure" UpdateCommand="users_update_city" UpdateCommandType="StoredProcedure" DeleteCommand="users_delete" DeleteCommandType="StoredProcedure" InsertCommand="users_add" InsertCommandType="StoredProcedure">
        <DeleteParameters>
            <asp:Parameter Name="id" Type="Int32" />
        </DeleteParameters>
        <InsertParameters>
            <asp:Parameter Name="id" Type="Int32" />
            <asp:Parameter Name="firstName" Type="String" />
            <asp:Parameter Name="lastName" Type="String" />
            <asp:Parameter Name="name" Type="String" />
        </InsertParameters>
        <UpdateParameters>
            <asp:Parameter Name="id" Type="Int32" />
            <asp:Parameter Name="firstName" Type="String" />
            <asp:Parameter Name="lastName" Type="String" />
            <asp:ControlParameter ControlId="DDLName" Name="name" PropertyName="SelectedValue" Type="String" />
        </UpdateParameters>
    </asp:SqlDataSource>

【问题讨论】:

  • 您在哪里尝试访问下拉列表的值?在哪个事件期间?
  • @DenisWessels UpdateCommand="users_update_city" - 通过存储过程更新行时

标签: c# asp.net gridview sqldatasource controlparameter


【解决方案1】:

好问题。我花了几个小时才解决这个问题,但我做对了。您需要进行两项更改。

1) 将下拉菜单更改为:

<asp:DropDownList ID="DDLName" runat="server" 
    DataSourceID="DDLSource" 
    DataTextField="name" 
    DataValueField="name"
    SelectedValue='<%# Bind("name") %>'>
</asp:DropDownList>

2) 替换这一行:

<asp:ControlParameter ControlId="DDLName" Name="name" PropertyName="SelectedValue" Type="String" />

有了这个:

<asp:Parameter Name="name" Type="String" />

【讨论】:

  • 我也是。谢谢
猜你喜欢
  • 1970-01-01
  • 2014-10-12
  • 2023-03-17
  • 2012-11-16
  • 2012-05-28
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 2018-06-04
相关资源
最近更新 更多