- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是场景。
我有一个包含 asp:PlaceHolder 的简单页面。
<%@ Page Title="" Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="TrainingPlan.aspx.vb" Inherits="TrainingPlan" %>
<%@ Reference Control="ctlTask.ascx" %>
<%@ Reference Control="ctlTaskheader.ascx" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" Runat="Server">
<div class="centered">
<h2><asp:Label ID="lblPlanTitle" runat="server" Text="Plan Title"></asp:Label></h2>
<hr />
<br />
<asp:ImageButton ID="imgbtnSave" runat="server" ImageUrl="~/Images/save.ico" />
<br />
<asp:PlaceHolder ID="PlanPlaceHolder" runat="server"></asp:PlaceHolder>
</div>
</asp:Content>
此页面上的占位符填充有同一 Web 用户控件的多行。该 Web 用户控件包含多个文本框。对于此 Web 用户控件中的每个文本框,我都有公共(public)属性来设置和获取文本值。在 Web 用户控件的页面加载事件中,我将 onClick 属性添加到其中一些文本框,如下所示。
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
txtTrainingStart.Attributes.Add("onClick", "txtTrainingStart_Click(" & txtTrainingStart.ClientID & ", " & txtTask.ClientID & ");")
txtTraineeBadgeNum.Attributes.Add("onClick", "txtTraineeBadgeNum_Click(" & txtTraineeBadgeNum.ClientID & ", " & txtTask.ClientID & ", " & txtTrainingStart.ClientID & ");")
txtTrainerBadgeNum.Attributes.Add("onClick", "txtTrainerBadgeNum_Click(" & txtTrainerBadgeNum.ClientID & ", " & txtTrainingComplete.ClientID & ", " & txtTask.ClientID & ", " & txtTraineeBadgeNum.ClientID & ", " & Session.Item("isTrainer").ToString.ToLower & ");")
txtDecertifyingOfficial.Attributes.Add("onClick", "txtDecertifyingOfficial_Click(" & txtDecertifyingOfficial.ClientID & ", " & txtTrainerBadgeNum.ClientID & ", " & txtTask.ClientID & ", " & Session.Item("isDecertifyingOfficial").ToString.ToLower & ");")
End Sub
对于每个 onClick 事件,我都有相应的 JavaScript 函数。
<script type="text/javascript">
function txtTrainingStart_Click(txtTrainingStart, txtTask) {
//processing and updates to textboxes here
}
</script>
问题就在这里。
在包含占位符的主页上,我有一个保存按钮。在保存按钮的单击事件中,我循环遍历占位符中包含的每个 Web 用户控件来处理和保存数据。
Protected Sub imgbtnSave_Click(sender As Object, e As ImageClickEventArgs) Handles imgbtnSave.Click
For Each item As Control In PlanPlaceHolder.Controls
Dim task As ctlTask = TryCast(item, ctlTask)
If Not IsNothing(task) Then
'need updated textbox values here.
'The following line gets the original textbox value, not the updated value that I need
Dim test As String = task.trainingStart
End If
Next
End Sub
我尝试过的所有方法都只能获取页面加载时文本框中的原始值。我认为这应该很简单,我只是缺少一些基本的东西。我在谷歌上搜索了很多解决方案,但还没有找到。这是我发现的最接近的东西 -> Set Text property of asp:label in Javascript PROPER way 。尽管该帖子处理的是标签而不是文本框,并且没有使用包含多个 Web 用户控件的占位符。据我了解,我需要将更新从客户端发布回服务器,但我不知道如何执行此操作。我尝试过使用 Request.Form
属性,但似乎无法实现该功能。我错过了什么?
感谢您的帮助,瑞兰
编辑
以下是根据请求使用 Web 用户控件填充占位符的代码
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim DBConn As MySqlConnection
Dim cmd As New MySqlCommand
DBConn = New MySqlConnection(Globals.mysqlConStr)
Try
lblPlanTitle.Text = Request.QueryString("plan_name") & " Training Plan"
If Session.Item("empID") = -1 Then
empID = clsUser.getID
Else
empID = Session.Item("empID")
End If
Dim strSQL As String = "SELECT * FROM task_revs tr WHERE tr.change != 'Deleted' and tr.id_plan = " & Request.QueryString("id_plan") & " ORDER BY task_num, rev_date desc"
Dim da As New MySqlDataAdapter(strSQL, DBConn)
Dim dtAllRevs As New DataTable
da.Fill(dtAllRevs)
Dim dtCurrentRev As New DataTable
Dim lastTaskNum As String = ""
dtCurrentRev = dtAllRevs.Clone
For Each row As DataRow In dtAllRevs.Rows
If lastTaskNum <> row("task_num") Then
dtCurrentRev.ImportRow(row)
lastTaskNum = row("task_num")
End If
Next
strSQL = "SELECT * FROM checkoffs WHERE emp_id = " & empID
da = New MySqlDataAdapter(strSQL, DBConn)
Dim dtCheckoffs As New DataTable
da.Fill(dtCheckoffs)
Dim addColor As Boolean = True
Dim tabWidth As Integer
Dim Header As ctlTaskHeader = LoadControl("ctlTaskHeader.ascx")
PlanPlaceHolder.Controls.Add(Header)
For Each row As DataRow In dtCurrentRev.Rows
Dim newRow As ctlTask = LoadControl("ctlTask.ascx")
tabWidth = 0
newRow.id_Task = row("id_Task")
newRow.taskNum = row("task_num")
newRow.task = row("task")
If row("is_header") = True Then
If row("task_num").ToString.EndsWith(".0") And row("task_num").ToString.Split(".").Count = 2 Then
newRow.taskBold = True
newRow.taskItalic = True
Else
newRow.taskForeColor = Drawing.Color.Blue
newRow.taskItalic = True
tabWidth += 10
End If
Else
tabWidth += 10
End If
For i As Integer = 0 To row("task_num").ToString.Split(".").Count - 3
tabWidth += 10
Next
newRow.TabSize = tabWidth
If Not IsDBNull(row("task_level")) Then
For i As Integer = 0 To row("task_level") - 1
newRow.taskLevel = newRow.taskLevel & "*"
Next
End If
If addColor = True Then
newRow.taskNumBackColor = Drawing.Color.LightGray
newRow.taskLevelBackColor = Drawing.Color.LightGray
newRow.taskBackColor = Drawing.Color.LightGray
newRow.trainingStartBackColor = Drawing.Color.LightGray
newRow.trainingCompleteBackColor = Drawing.Color.LightGray
newRow.traineeBadgeNumBackColor = Drawing.Color.LightGray
newRow.trainerBadgeNumBackColor = Drawing.Color.LightGray
newRow.decertifyingOfficialBackColor = Drawing.Color.LightGray
End If
addColor = Not addColor
For Each checkoff As DataRow In dtCheckoffs.Rows
If checkoff("id_task") = row("id_task") Then
If Not IsDBNull(checkoff("training_start")) Then
newRow.trainingStart = checkoff("training_start")
End If
If Not IsDBNull(checkoff("training_complete")) Then
newRow.trainingComplete = checkoff("training_complete")
End If
If Not IsDBNull(checkoff("trainee_badge")) Then
newRow.traineeBadgeNum = checkoff("trainee_badge")
End If
If Not IsDBNull(checkoff("trainer_badge")) Then
newRow.trainerBadgeNum = checkoff("trainer_badge")
End If
If Not IsDBNull(checkoff("decertifying_official")) Then
newRow.decertifyingOfficial = checkoff("decertifying_official")
newRow.taskNumBackColor = Drawing.Color.LightSalmon
newRow.taskLevelBackColor = Drawing.Color.LightSalmon
newRow.taskBackColor = Drawing.Color.LightSalmon
newRow.trainingStartBackColor = Drawing.Color.LightSalmon
newRow.trainingCompleteBackColor = Drawing.Color.LightSalmon
newRow.traineeBadgeNumBackColor = Drawing.Color.LightSalmon
newRow.trainerBadgeNumBackColor = Drawing.Color.LightSalmon
newRow.decertifyingOfficialBackColor = Drawing.Color.LightSalmon
End If
End If
Next
If row("is_header") = True And PlanPlaceHolder.Controls.Count > 1 Then
Dim newLine As LiteralControl = New LiteralControl("<br/>")
PlanPlaceHolder.Controls.Add(newLine)
End If
PlanPlaceHolder.Controls.Add(newRow)
Next
Catch ex As Exception
clsLog.logError(ex)
Finally
DBConn.Close()
End Try
编辑2
我认为展示我如何更新 javascript 函数中的文本框可能也很重要
function txtTrainingStart_Click(txtTrainingStart, txtTask) {
var currentdate = new Date();
var datetime = (currentdate.getMonth() + 1) + "/" + currentdate.getDate() + "/" + currentdate.getFullYear() + " " + getTimeAMPM();
txtTrainingStart.value = datetime;
txtTrainingStart.style.backgroundColor = "yellow";
}
最佳答案
编辑3:
下面的代码适用于静态控件,但动态创建的控件不会在回发时保留。您将需要存储更新的值,以便可以在回发时以某种方式检索它们(例如 session 变量或隐藏字段)。如果可能,我会静态创建控件并将它们填充到 page_load
中,隐藏没有数据的控件 - 这将允许您在回发时获取值,如下所示。
嗯...我设置了您的代码的 super 简化版本,并几乎按原样运行(没有数据库功能),而且它似乎工作正常。
这是我使用的简化版本:
<asp:Content id="Content1" ContentPlaceHolderID="MainContent" runat="server">
<asp:ImageButton ID="imgbtnSave" runat="server"></asp:ImageButton>
<asp:PlaceHolder ID="PlanPlaceHolder" runat="server">
<asp:TextBox runat="server" ID="txtTrainingStart" value="before" ></asp:TextBox>
</asp:PlaceHolder>
</asp:Content>
Javascript:
function txtTrainingStart_Click(txtTrainingStart, txtTask) {
var currentdate = new Date();
var test = "after";
txtTrainingStart.value = test;
txtTrainingStart.style.backgroundColor = "yellow";
}
VB:
Protected Sub imgbtnSave_Click(ByVal sender As Object, ByVal e As ImageClickEventArgs Handles imgbtnSave.Click
For Each item As TextBox In PlanPlaceHolder.Controls
'need updated textbox values here.'
Debug.WriteLine(item.ID)
Debug.WriteLine(item.Text)
Next
End Sub
我正在获取文本框的更新值,因此您应该能够将该值传递给函数并执行您需要的任何操作。
如果我遗漏了什么,请告诉我。
编辑2:我只是有一个想法——你能检查一下点击保存按钮后是否调用了page_load
吗?我想知道它是否会再次用原始值覆盖您更新的值。
如果是,我将通过回发检查将数据库功能包装在 page_load
中:
If Not IsPostBack
' connect to database'
' populate placeholder'
End If
关于javascript - 获取asp :TextBox text property in codebehind from a web user control after a javascript update,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18083263/
这个问题在这里已经有了答案: How to automatically select all text on focus in WPF TextBox? (33 个答案) How to select
我在我的项目中使用了以下模板:
我有一个非常奇怪的问题。我有多个用于用户名/密码的文本框,每个用户/密码组旁边都有一个复选框。当用户单击 CheckBox 时,如果他选中它,它旁边的用户名和密码 TextBox 将被启用,焦点将设置
我有两个带有这样的日期选择器的文本框。 $(function () { $('#value_date').datetimepicker({ format: 'MM/DD/YY
我检查了大约 60 个国家/地区的邮政编码。用户输入邮政编码,根据该国家/地区的规则进行检查。美国是个异常(exception),我可以根据已输入的其他街道地址信息自动填写值。在某些方面,它基本上是一
我们的应用程序启动几个后台进程并将它们的输出放入 TextBoxes - 每个在 TabControl 中的一个单独的 TabItem。我希望 TextBoxes 自动滚动以显示最后一个输出行,因此在
TextBlock 元素很好地处理了 LineHeight,允许文本完全显示,而无需剪切。但是,我想将其更改为 TextBox 以方便编辑文本,这就是我的麻烦开始的地方。 TextBlock 显示如下
我正在尝试“帮助”用户表单上文本输入框的用户输入百分比。 截至目前,我的输入框将任何输入转换为百分比形式。这意味着键入“6”会将值转换为 600%。如下所示 databaseViewer 是输入框从中
我有一个带有 RichEditBox 的 Windows 应用商店应用程序(编辑)和一个 Grid (边注)。 我需要始终匹配两个元素的垂直滚动位置。这样做的目的是允许用户在文档的页边空白处添加注释。
我有一个问题。下面的代码用于通过 .append() 和 .remove() 动态添加和删除文本框。我希望占位符为 textbox 的文本框中的所有数据都会内爆,并放置在我设置的名称为 textbox
我有一个文本框,其 Text 属性具有 TwoWay MultiBinding,UpdateSourceTrigger 设置为 属性已更改。第一个 Binding 是一个依赖属性 (Value),它具
它们之间有什么区别吗?谢谢 TextBox.Clear(); TextBox.Text = string.Empty; 最佳答案 在实践中:不。在内部,有。两者都以完全不同的方式清除文本。 我不敢告
这两种方法有什么区别? 一个比另一个更有效率吗? 我在想 AppendText() 可能使用类似于 StringBuilder 的方法,即它使用自己的缓存而不是每次都创建和附加一个新字符串,是这样吗?
我有一个文本框来显示一个很长的 Base64 字符串。 TextBox.Multline = true 和 TextBox.WordWrap = true。 此问题是由文本框本身的自动字边界检测引起的
在 this document在描述 Windows 10 UWP 应用程序的生命周期时,它指出: Users now expect your app to remember its state as
我需要检查如果我的 TextBox (txtmoney) 为空或等于 0,则不允许按 0 键键盘或数字 0。 我该怎么做? 最佳答案 Before implementing please refer
我有一个显示一些 TextBoxes 的 ListView。对于每个 TextBox,我都会捕获一个 SelectionChanged 事件。 我的 XAML 文件看起来像这样:
当我单击(或双击)Access 表单的文本框时,我需要选择其中的所有文本。我尝试了以下代码,但没有成功: Me.txt_CompraPreco.SelStart = 0 Me.txt_CompraPr
我有一个 ListView(在更新面板中)绑定(bind)到一个 ObjectDataSource(连接到一个 NHibernate 对象)并且在 EditItemTemplate 我使用 Text=
我正在尝试使用 D3 绘制多条交互式线条。单击每一行时,应根据当前鼠标坐标显示一个 float 文本框,并等待输入更新行坐标。更改文本框后,该行应自动更新,文本框应消失。有人可以看看我的代码并找出问题
我是一名优秀的程序员,十分优秀!