我有一个表单,我希望根据用户在另一个type =“date”的TextBox中输入的日期自动填充TextBox和星期几。我已经在javascript中成功完成了这项工作,但是我是c#的新手,并且无法弄明白。
这是一个要使用的测试.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>
我想根据TextBox“Beginning_Date”中的日期输入填充TextBox“beginning_day”。
编辑添加:
所提议的解决方案都没有为我工作。我设法将以下代码组合在一起,完成了我的需要......
protected void GetBeginningDay(object sender, EventArgs e)
{
try
{
beginning_day.Text = Convert.ToDateTime(beginning_date.Text).DayOfWeek.ToString();
}
catch (Exception ex)
{
Response.Write("Error" + ex.Message);
}
}
...但是我无法启动AutoPostBack,只有当我点击提交按钮并且由于异常而触发回发时才会执行代码隐藏。
答案 0 :(得分:1)
我已经稍微修改了你的标记,这应该就是你需要的所有内容:
<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" />
请注意&#34; onChange&#34;已更改为使用ASP.NET TextBox的事件OnTextChanged。您可以确定是否应将AutoPostBack设置为true,但我认为它应该是。如果为false,则AutoPostBack将等待提交表单以引发事件,如果为true,则立即引发事件。
另外,我已经删除了表单,因为WebForms通常已经删除了表单。
这是背后的代码:
protected void beginning_date_TextChanged(object sender, EventArgs e)
{
DateTime date;
DateTime.TryParse(beginning_date.Text, out date);
beginning_day.Text = date.DayOfWeek.ToString();
}
您可能需要额外的逻辑,但这是它的要点。
答案 1 :(得分:1)
这是使用服务器端asp.net C#代码执行此操作的方法。
onChange事件是一个客户端JavaScript事件,它不能在没有__doPostback()调用的情况下填充服务器端(C#)代码。更好的方法是使用具有AutoPostback属性的OnTextChanged事件。
OnTextChanged事件无法使用AutoPostBack =&#34; true&#34;。
.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>
.aspx.cs文件(文件后面的代码)
protected void GetBeginningDay(object sender, EventArgs e)
{
string userInput = TextBox1.Text;
DateTime dateTime;
if (DateTime.TryParse(userInput, out dateTime))
{
TextBox2.Text = dateTime.DayOfWeek.ToString();
}
}