【发布时间】:2014-01-02 00:16:59
【问题描述】:
我不明白为什么我的用户控件中的属性ParentScheduleItemId 总是为零。我要做的就是将一个值传递给我的用户控件,以便它可以用作 SqlDataSource 中选择命令的选择参数。我有下面的代码,这似乎导致ParentScheduleItemId == 0,但它实际上打印了我在ascx文件中传递它的预期非零值,就在句子No data was returned旁边:
namespace CCApplication.Cms
{
public partial class schedule_sub_item : System.Web.UI.UserControl
{
public int ParentScheduleItemId {
get;
set; }
protected void Page_Load(object sender, EventArgs e)
{
SqlDataSource1.SelectParameters.Add("ParentScheduleItemId", ParentScheduleItemId.ToString());
//SqlDataSource1.SelectParameters.Add("ParentScheduleItemId", "12");
}
}
}
我在 ascx 文件中有以下代码
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:NewConferencesApplicationConnectionString %>"
SelectCommand="
SELECT [ScheduleItemId],[ParentScheduleItemId],[Name],[Type],[Location],[MaximumUsers],[CompanionAllowed],[StartTime],[EndTime]
FROM [Conferences_ScheduleItem]
WHERE ParentScheduleItemId = @ParentScheduleItemId
ORDER BY StartTime;
"
DeleteCommand="DELETE FROM [Conferences_ScheduleItem] WHERE [ScheduleItemId] = @ScheduleItemId"
>
</asp:SqlDataSource>
<asp:ListView ID="ListView1" runat="server" DataKeyNames="ScheduleItemId"
DataSourceID="SqlDataSource1">
<EmptyDataTemplate>
<table id="Table1" runat="server" style="">
<tr>
<td>
No data was returned.<% Response.Write(ParentScheduleItemId.ToString()); %></td>
</tr>
</table>
</EmptyDataTemplate>
<ItemTemplate>
<tr style="">
<td>
<asp:Label ID="ScheduleItemIdLabel" runat="server"
Text='<%# Eval("ScheduleItemId") %>' />
</td>
</tr>
</ItemTemplate>
<LayoutTemplate>
<table id="Table2" runat="server">
<tr id="Tr1" runat="server">
<td id="Td1" runat="server">
<table ID="itemPlaceholderContainer" runat="server" border="0" style="">
<tr ID="itemPlaceholder" runat="server">
</tr>
</table>
</td>
</tr>
<tr id="Tr3" runat="server">
<td id="Td2" runat="server" style="">
</td>
</tr>
</table>
</LayoutTemplate>
</asp:ListView>
所以我想做的就是做一些类似<usercontrol:mylistview ParentScheduleItemId=24> 的事情,然后将 24 用作我的 SelectCommand 的一部分。我如何做到这一点?
注意 - 你会注意到我注释掉了 SqlDataSource1.SelectParameters.Add("ParentScheduleItemId", "12"); 行。如果我取消注释它,它实际上会按预期运行,并为我的选择参数提供数字 12,并且 sqldatasource 为我提供我想要的值。我只是不明白为什么它上面的行有一个 ParentScheduleItemId == 0。这与页面加载周期有关吗?无论如何,我只想将正确的 parentscheduleitemid 传递给我的选择命令。
【问题讨论】:
-
在`set处设置断点; }` 和
SqlDataSource1.SelectParameters.Add("ParentScheduleItemId", ParentScheduleItemId.ToString());,看看哪个先命中。 -
我已经确认页面加载在 ParentScheduleItemId 的 setter 函数之前触发。所以现在我不确定如何/何时将变量传递给我的 selectcommand....
标签: asp.net user-controls sqldatasource