C# 从日期文本框中的用户输入返回工作日
我有一个表单,我想根据用户在另一个文本框中输入的日期,用type=“date”自动填充一个文本框中的星期几。我已经用javascript成功地做到了这一点,但是我对c#还不熟悉,还没有弄明白 以下是要使用的test.aspx文件:C# 从日期文本框中的用户输入返回工作日,c#,asp.net,.net,C#,Asp.net,.net,我有一个表单,我想根据用户在另一个文本框中输入的日期,用type=“date”自动填充一个文本框中的星期几。我已经用javascript成功地做到了这一点,但是我对c#还不熟悉,还没有弄明白 以下是要使用的test.aspx文件: <form runat="server" id="test"> <label for="beginning_date">beginning day & date</label> <asp:TextBox
<form runat="server" id="test">
<label for="beginning_date">beginning day & date</label>
<asp:TextBox runat="server" ID="beginning_day" onChange="GetBeginningDay" ReadOnly="true"></asp:TextBox>
<asp:textBox runat="server" ID="beginning_date" type="date" onChange="GetBeginningDay"></asp:textBox>
</form>
…但是,我无法启动AutoPostBack,只有当我点击“提交”按钮并由于异常而触发回发时,才会执行隐藏的代码。我已稍微修改了您的标记,这应该就是您所需要的:
<label for="beginning_date">beginning day & date</label>
<asp:TextBox runat="server" ID="beginning_date" OnTextChanged="beginning_date_TextChanged" AutoPostBack="true" type="date" />
<asp:TextBox runat="server" ID="beginning_day" ReadOnly="true" />
您可能需要额外的逻辑,但这是它的要点。这是如何使用服务器端asp.net C#代码来实现的 onChange事件是一个客户端JavaScript事件,如果没有_doPostback()调用,它无法填充服务器端(C#)代码。更好的方法是使用带有AutoPostback属性的OnTextChanged事件 没有AutoPostBack=“true”,ContextChanged事件无法工作 .aspx文件
<asp:TextBox ID="TextBox1" AutoPostBack="true" runat="server" TextMode="Date" OnTextChanged="GetBeginningDay"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server" ReadOnly="true"></asp:TextBox>
当AutoPostBack设置为false时,将触发OnTextChanged事件(除非文本从未更改),但在其他内容引发回发之前,不会触发该事件。感谢您的回复。您认为将事件转移到服务器端而不是客户端值得做额外的工作吗?它背后的想法是消除对javascript文件的需要,并将表单的所有函数集中在一个代码隐藏文件中。我想这取决于具体情况,但我可能会坚持使用javascript,除非你有更多的事情要做,而不仅仅是更新一个输入元素。我正试图将此放在我的代码隐藏中。我假设需要更改var input=(TextBox)sender;要让它与我的控件一起工作,但我不确定要更改什么。不,您不需要更改该行。无论如何,我已经更新了我的原始代码,使之更加清晰。仍然不起作用。当我四处查看时,我发现DateTime使用的日期格式(yyyy,mm,dd)与type=date(dd/mm/yyy)的文本框不同。你认为这可能是问题所在吗?
protected void beginning_date_TextChanged(object sender, EventArgs e)
{
DateTime date;
DateTime.TryParse(beginning_date.Text, out date);
beginning_day.Text = date.DayOfWeek.ToString();
}
<asp:TextBox ID="TextBox1" AutoPostBack="true" runat="server" TextMode="Date" OnTextChanged="GetBeginningDay"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server" ReadOnly="true"></asp:TextBox>
protected void GetBeginningDay(object sender, EventArgs e)
{
string userInput = TextBox1.Text;
DateTime dateTime;
if (DateTime.TryParse(userInput, out dateTime))
{
TextBox2.Text = dateTime.DayOfWeek.ToString();
}
}