【问题标题】:Can an ASP.Net asp:ControlParameter ControlID be a public shared variable instead of an asp:label?ASP.Net asp:ControlParameter ControlID 可以是公共共享变量而不是 asp:label 吗?
【发布时间】:2013-04-25 14:37:10
【问题描述】:

ASP.Net asp:ControlParameter ControlID 可以是公共共享变量而不是 ASP:label 吗?

我们使用 asp:label 作为 DataSource 的参数,但现在想使用公共共享变量而不是标签。

这是使用 asp:label 的参数标记。

<asp:ControlParameter 
    ControlID="LabelCheckBoxMonday" 
    Name="DayOfWeekMonday" 
    PropertyName="Text" 
    Type="String" />

我们在代码隐藏中添加了这个公共共享变量。

Public Shared blnDayOfWeekMonday As Boolean

我们将参数的标记更改为此。

<asp:ControlParameter 
    ControlID="blnDayOfWeekMonday" 
    Name="DayOfWeekMonday" 
    PropertyName="Text" 
    Type="String" />

这是将值放入变量的编码。用于为标签执行此操作的原始编码已被注释掉。

Protected Sub ImageButtonInsertDayOfWeekMonday_Click(sender As Object, e As ImageClickEventArgs)

    Dim imgTheImageButton As New ImageButton

    imgTheImageButton = DetailsView.FindControl("ImageButtonInsertDayOfWeekMonday")

    If imgTheImageButton.ImageUrl = "../../Images/checked.png" = True Then

        imgTheImageButton.ImageUrl = "../../Images/unchecked.png"
        '            LabelCheckBoxMonday.Text = False
        blnDayOfWeekMonday = False
    Else

        imgTheImageButton.ImageUrl = "../../Images/checked.png"
        '           LabelCheckBoxMonday.Text = True
        blnDayOfWeekMonday = True
    End If
End Sub

所有这些都是以下 InsertCommand 的一部分:

    InsertCommand=
        "INSERT INTO [TeacherSchedule] 
            ([DayOfWeekMonday], 
             [DayOfWeekTuesday], 
             [DayOfWeekWednesday], 
             [DayOfWeekThursday], 
             [DayOfWeekFriday], 
             [DayOfWeekSaturday], 
             [DayOfWeekSunday], 
             [StartTime],
             [EndTime],
             [ClassID],
             [TeacherID]) 
        VALUES (@DayOfWeekMonday, 
                @DayOfWeekTuesday, 
                @DayOfWeekWednesday, 
                @DayOfWeekThursday, 
                @DayOfWeekFriday, 
                @DayOfWeekSaturday, 
                @DayOfWeekSunday, 
                @StartTime, 
                @EndTime,
                @ClassID,
                @TeacherID)" 

当 Web 表单运行时,将其更改为公共共享变量后没有任何反应。

你能告诉我我还需要做什么才能继续吗?

* 更新 *

使用 Marks 的建议,我发现了如何做一个 asp:QueryStringParameter 但仍然不知道如何用一个值填充它。这是作为 asp 的参数:QueryStringParameter

<asp:QueryStringParameter
    Name="DayOfWeekMonday" 
    QueryStringField="QSDayOfWeekMonday" />

如何在 ImageButtonInsertDayOfWeekMonday_Click 子例程中填充 QSDayOfWeekMonday?

我试过了:

QSDayOfWeekMonday = False

但出现“未声明”错误。

* 完整标记和代码隐藏编码 *

http://pastebin.com/embed_js.php?i=kye3c2U8

【问题讨论】:

  • blnDayOfWeekMonday 不是控件,因此您不能使用 ControlID。老实说,这两种方式都非常糟糕。为什么不使用查询字符串参数?
  • 感谢马克的回复。您能否向我们展示如何使用查询字符串参数以及所需的标记和代码隐藏编码将 true 或 false 存储到 @DayOfWeekMonday 中?我还包括了 InsertCommand,所以你知道我们要做什么。
  • 感谢 pastebin 示例。 DayOfWeekMonday 作为一个静态的,意味着每个人都将共享相同的值。我不认为那是你想要的。另外,我相信 DefaultValue 是一个字符串,所以你需要确保它是一个字符串值。

标签: asp.net vb.net controlparameter


【解决方案1】:

另一种选择是将参数用作:

<asp:Parameter Name="DateOfWeekMonthly" />

并在代码中将 DefaultValue 属性设置为您要指定的值,如下所示:

DataSourceControl1.Parameters["DateOfWeekMonthly"].DefaultValue = someVariable;

这对我有用。

您可以在触发的 Selecting 事件中建立此事件;此事件在选择发生之前触发;因此,您可以建立布尔值。我相信在这里,您可以将其添加到事件参数中定义的值集合中。

【讨论】:

  • 感谢您的回答。我使用了 SqlDataSourceDetails.InsertParameters("DayOfWeekMonday").DefaultValue = False 但希望能够将值实际设置为 false 而不仅仅是设置默认值。这个可以吗?
  • 尝试使用 "False" 或 Boolean.FalseString 或 "0"(意味着 false,因为布尔值在 sql 中有点)。我不能 100% 确定这些选项中的哪一个会起作用(因为我不知道我是否将此技巧与布尔参数一起使用),但其中一个会起作用。
  • 我发现我可以将 Type="Boolean" 添加到参数中,但由于我想让用户在 true 和 false 之间切换,因此默认值可能会在第一次运行代码时起作用。当我运行代码时,参数以空值结束。
  • 我相信在数据源触发选择操作之前,您必须在每次回发时建立这个。不看代码就很难调试这些类型的问题。如果您可以在上面发布和更新,它将帮助我了解发生了什么。
  • 你能告诉我们怎么做吗?我可以在stackoverflow上发布所有代码吗?谢谢。
【解决方案2】:

我使用了这种较短的方式:

<asp:Parameter Name="DateOfWeekMonthly" Type="Boolean" DefaultValue="true" />

这也有效。

【讨论】:

    猜你喜欢
    • 2018-11-13
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 2011-02-19
    相关资源
    最近更新 更多