.NET 4.5 中 Textmode Time 属性上的文本在代码隐藏中消失

Posted

技术标签:

【中文标题】.NET 4.5 中 Textmode Time 属性上的文本在代码隐藏中消失【英文标题】:Text on Textmode Time property in .NET 4.5 disappears in Code Behind 【发布时间】:2014-10-07 08:07:19 【问题描述】:

我阅读了很多关于此的主题,但我也遇到了 .NET 4.5 上的 Textmode = "Time" 属性的问题。

我在 aspx 端有这个:

<asp:TextBox runat="server" ID="txtBoxStartTime" TextMode="Time"></asp:TextBox>

在 vb.net 方面,当我尝试从此文本框中获取 Text 值时,我只有空字符串 ("")。

CDate(txtBoxStartTime.Text)

在客户端,在 webInspector 中,我可以轻松地从文本框中获取值,但我需要在服务器端...

即使我尝试使用带有 runat="server" 的 html5 标记,我也会遇到同样的问题。

我注意到问题与框架 4.5 上的所有 Textmode 属性相同

对此有何建议/解决方案? 非常感谢您的意见!

谢谢!

【问题讨论】:

我找到了解决这个问题的方法:***.com/questions/23777011/… 【参考方案1】:

使用此属性:“格式”

<asp:TextBox ID="txtTime" runat="server" TextMode="Time" format="HH:mm" />

它将返回 24 小时的格式。

如果您的值是晚上 10:00,那么在服务器端,(txtTime.Text) 值将是“22:00”。

我在 Chrome 中测试它并且它工作正常

【讨论】:

【参考方案2】:

使用HH:mm时间格式:

Time.Text = SomeTime.ToString("HH:mm");

【讨论】:

【参考方案3】:

所以,

我已经为此苦苦挣扎了几个小时。我没有找到任何“代码隐藏”解决方案。所以我提出了一个解决方案。也许它会在某些方面对您有所帮助:

使用 javascript 将值存储到隐藏字段中,如下所示:

<asp:TextBox runat="server" ID="txtBoxStartTime" TextMode="Time" Width="102px" onchange="storeStartTime()"></asp:TextBox>

<asp:HiddenField runat="server" ID="hdnStartTime"/>

JavaScript 函数:

function storeStartTime() 
var x = document.getElementById("ctl00_mainPageBody_txtBoxStartTime");
var y = document.getElementById("ctl00_mainPageBody_hdnStartTime");
y.value = x.value;
alert(y.value);

如果遇到这个问题,希望对你有所帮助!

【讨论】:

【参考方案4】:

所以,为了得到答案,这是我的 Page.Load 上的代码(用于测试)

你可以看到 txtBoxStarTime.Text 没有价值

对于我的情况,我在更新面板中有这个:

<asp:TextBox runat="server" ID="txtBoxStartTime" TextMode="Time" Width="102px"></asp:TextBox>


<asp:TextBox runat="server" ID="txtBoxEndTime" TextMode="Time" Width="102px"></asp:TextBox>


<asp:Button CssClass="positive" ID="btnOtherSendRequest" runat="server" Text="&nbsp;Send Request" ToolTip="The selected request would be sent to X" OnClick="btnOtherSendRequest_Click"/>

这是VB.NET中的代码:

Protected Sub btnOtherSendRequest_Click(sender As Object, e As EventArgs)
    Try

        lblSubmitted.Text = ""
        lblValidateNotInfo.Text = ""
        hdnRequestType.Value = "OTH"

        Dim messageSuccessful As String = "Thank you for submitting your Request(s)!"
        Dim messageUnSuccessful As String = "The Request was not submitted due to some errors. Please 'Go Back' and re-send!"

        Select Case ddlRequest.SelectedValue
            Case "18" ' Schedule Update Call
                If Not (txtBoxStartDate.Text.Length > 0 And txtBoxEndDate.Text.Length > 0 And IsDate(txtBoxStartDate.Text) And IsDate(txtBoxEndDate.Text)) Then
                    ' AI - if dates are in invalid format
                    ScriptManager.RegisterStartupScript(Me, Me.GetType, "AlertScript", "alert ('Please make sure the dates are in a valid format!');", True)
                    Exit Sub
                ElseIf Not CDate(txtBoxStartDate.Text).CompareTo(Date.Now) > 0 Then
                    ' AI - Start Date must be greater than today.
                    ScriptManager.RegisterStartupScript(Me, Me.GetType, "AlertScript", "alert ('""Start"" date must be a future date!');", True)
                    Exit Sub
                ElseIf Not CDate(txtBoxEndDate.Text).CompareTo(CDate(txtBoxStartDate.Text)) >= 0 Then
                    ' AI - Start Date must be greater than today.
                    ScriptManager.RegisterStartupScript(Me, Me.GetType, "AlertScript", "alert ('""End"" date must be the same as the ""Start"" date or a date after the ""Start"" date!');", True)
                    Exit Sub
                ElseIf CDate(txtBoxStartDate.Text).DayOfWeek = DayOfWeek.Saturday Or CDate(txtBoxStartDate.Text).DayOfWeek = DayOfWeek.Sunday Or CDate(txtBoxEndDate.Text).DayOfWeek = DayOfWeek.Saturday Or CDate(txtBoxEndDate.Text).DayOfWeek = DayOfWeek.Sunday Then
                    ScriptManager.RegisterStartupScript(Me, Me.GetType, "AlertScript", "alert ('Weekends excluded!');", True)
                    Exit Sub
                Else
                    lblSubmitted.Text = messageSuccessful
                End If
            Case "19" ' Request Training Call
            Case "20" ' Request Call from Cust. Service
            Case "21" ' Other Request
                If txtBoxOther.Text <> "" Then
                    lblSubmitted.Text = messageSuccessful
                Else
                    lblSubmitted.Text = messageUnSuccessful
                    ScriptManager.RegisterStartupScript(Me, Me.GetType, "AlertScript", "alert ('Please enter your request into the textarea first!');", True)
                    txtBoxOther.Focus()
                    Exit Sub
                End If
        End Select

        Call sendRequest()


        Call JSEffect(True)
    Catch ex As Exception
        lblMessage.Text = "Error when taking the request to be inserted - " & ex.Message
    Finally
        hlServCenterPend.Text = "Pending Requests (" & getServCenterStatus("PEND").ToString & ")"
        hlServCenterComp.Text = "Completed Requests (" & getServCenterStatus("COMP").ToString & ")"
    End Try
End Sub

在这里我得到了错误:

Public Sub sendRequest(Optional pid As Integer = 0, Optional claim As Integer = 0, Optional insured As Integer = 0)

    Dim req As New cls_services.request
    Try

        req.clinicID = CInt(MyMod.FetchStoredData("ClinicID"))
        req.pid = pid
        req.type = CInt(ddlRequest.SelectedValue)
        Select Case req.type
            Case 1, 11, 12, 13, 14
                req.status = "COMP"
            Case Else
                req.status = "PEND"
        End Select
        req.claimID = claim
        req.insuranceID = insured
        req.dueDate = req.getDueDate(req.type)
        req.other = Trim(txtBoxOther.Text)
        Select Case req.type
            Case 18
                req.fromDate = CDate(txtBoxStartDate.Text)
                req.fromTime = CDate(txtBoxStartTime.Text)//ERROR HERE! - EXCEPTION
                req.toDate = CDate(txtBoxEndDate.Text)
                req.toTime = CDate(txtBoxEndTime.Text)
        End Select
        req.fax = Trim(txtFaxTreatmentRecords.Text)
        req.createUser = Request.ServerVariables("AUTH_USER")

我在这里的解决方案是尝试将文本框中的值存储在隐藏字段中,然后在代码隐藏中访问...但它仍然是“最后的措施”解决方案。

事实是,正如我所说的 - 在 PostBack 上 - “文本”值消失了。不知道为什么。

仍在等待建议! :)

【讨论】:

【参考方案5】:

TextBoxMode Enumeration

SingleLine 模式将 TextBox 控件显示为单行。如果 用户输入的文本超出了 TextBox 的物理大小 控件,文本将水平滚动。多线模式显示 基于 Rows 属性的 TextBox 的高度,并允许数据 多行输入。如果 Wrap ,文本将自动换行 属性设置为真。如果用户输入的文本超出 TextBox 的物理大小,文本将相应地滚动并 将出现滚动条。密码模式的行为类似于 SingleLine 模式,除了在 TextBox 中输入的所有字符 控件被屏蔽并且不保存在视图状态中。

然后

其余选项对应于类型属性值 HTML5 规范中的 input 元素。

因此文本框的服务器端行为没有任何变化,以下代码按预期工作

标记

<asp:TextBox runat="server" TextMode="Time" ID="test"></asp:TextBox>
   <asp:Button runat="server" ID="btn" Text="ok" />

背后的 C# 代码

protected void Page_Load(object sender, EventArgs e)
    
      string value = test.Text;
    

【讨论】:

你应该是对的......我不知道为什么这会发生在我的身上。我还在调查。感谢您的意见! 我当然可以在 PostBack 上说,该值从 TextBox 中消失了!有谁知道为什么?我对通用文本框进行了验证,如果验证失败,则删除“时间”文本框中的值... 在我的情况下,我在访问 Text 属性之前不小心清理了回发几行上的文本。【参考方案6】:

您是否尝试将其放入您的 page_load 中?

txtBoxStartTime.Attributes["type"] = "Time"

【讨论】:

我试过 txtBoxStartTime.Attributes("value") 它是“Nothing”。我现在正在尝试你的建议看看。

以上是关于.NET 4.5 中 Textmode Time 属性上的文本在代码隐藏中消失的主要内容,如果未能解决你的问题,请参考以下文章

.NET 3.5 和 4.5 中 LINQ 查询结果的差异 [重复]

我需要用于 .NET 4.5 的 Visual Studio 2012 还是 Visual Studio 2010 适合 4.5?

.NET 4.5 中新提供的压缩类

并行运行两个异步任务并在 .NET 4.5 中收集结果

在 C# .NET 4.5 中使用 SAML 2.0

.Net 4.5 Websocket 推送技术?