2015-01-16 5 views
1

У меня есть форма, где я хочу автоматически заполнить TextBox днем ​​недели на основе даты, введенной пользователем в другом текстовом поле с типом = «дата». Я успешно сделал это в javascript, однако я новичок в C# и не смог понять это.Возврат буднего дня с пользовательского ввода в дату TextBox

здесь файл .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_day» на основе ввода даты в TextBox «Beginning_Date».

EDIT TO ADD:

ни один из предложенных решений не работали для меня. Мне удалось получить следующий код вместе, что выполняет то, что мне нужно ...

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 стрелять и отделенный код выполняется только, когда я нажимаю кнопку отправки и исключение вызвано обратной связью.

ответ

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" /> 

Обратите внимание, что «OnChange» было изменено, чтобы использовать событие в 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(); 
} 

Вам может понадобиться дополнительная логика, но это суть его.

+0

Спасибо за ответ. Как вы думаете, стоит ли продолжать работу по переносу события на серверную, а не на клиентскую? Идея этого заключалась в том, чтобы устранить необходимость в файле javascript и централизовать все функции для формы в одном файле с кодом. – StateofDK

+1

Я полагаю, это зависит, но я бы, вероятно, придерживался JavaScript, если у вас не было больше дел, чем просто обновить один элемент ввода. – rrjohnson85

+0

Я пытаюсь поместить это в свой код. Я предполагаю, что нужно будет изменить var input = (TextBox) отправитель; , чтобы заставить его работать с моими элементами управления, но я не уверен, как его изменить на – StateofDK

1

Как вы можете это сделать, используя код ASP на стороне сервера asp.net.

Событие onChange - это событие JavaScript на стороне клиента, которое не может заполнить код на стороне сервера (C#) без вызова __doPostback(). Лучший способ сделать это - использовать событие OnTextChanged с свойством AutoPostback.

Событие OnTextChanged не может работать без AutoPostBack = "true".

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

Событие OnTextChanged будет срабатывать, если для параметра AutoPostBack установлено значение false (если текст не изменился), но он не срабатывает, пока что-то еще не вернет обратную передачу. – rrjohnson85