C# 从日期文本框中的用户输入返回工作日

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

我有一个表单,我想根据用户在另一个文本框中输入的日期,用type=“date”自动填充一个文本框中的星期几。我已经用javascript成功地做到了这一点,但是我对c#还不熟悉,还没有弄明白

以下是要使用的test.aspx文件:

<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();
    }
}