#c# #asp.net
#c# #asp.net
Вопрос:
На моей странице есть метка и выпадающий список, в котором указаны часовые пояса. Возможно ли заставить текст метки автоматически меняться для отображения выбранного значения из выпадающего списка при каждом изменении значения в раскрывающемся списке часовых поясов? Как бы я это сделал?
Ответ №1:
Вы могли бы написать функцию javascript для обновления вашей метки и вызвать ее из свойства onchange вашего выпадающего списка.
Комментарии:
1. выдает ошибку. в локальной системе не найдена выбранная зона
2. какой javascript вы используете?
Ответ №2:
Используйте Ajax или javascript на стороне клиента, чтобы определить, когда выпадающий список выбран. Если вы используете javascript, убедитесь, что это поведение также работает, когда javascript выключен. Т.Е. отправьте страницу и обновите метку на стороне сервера.
Ответ №3:
Для перезагрузки метки вы должны установить автоматическую отправку в выпадающем списке. Таким образом, вы можете использовать на странице загрузки TimeZoneInfo.
Вот пример, найденный в MSDN :
// Get Tokyo Standard Time zone
TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
DateTime tstTime = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst);
Console.WriteLine("Time in {0} zone: {1}", TimeZoneInfo.Local.IsDaylightSavingTime(tstTime) ?
tst.DaylightName : tst.StandardName, tstTime);
Console.WriteLine(" UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(tstTime, tst));
Прежде всего, вы должны найти часовой пояс по идентификатору. Вы можете получить весь идентификатор, используя этот метод :
System.Collections.ObjectModel.ReadOnlyCollection<TimeZoneInfo> TimeZoneColl = TimeZoneInfo.GetSystemTimeZones();
Затем в цикле foreach вы можете получить идентификатор и привязку к значениям выпадающего списка.
В конце концов, вам нужно только параметризовать пример следующим образом :
TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById(*dropdownlistselectedvalue*);
DateTime tstTime = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst);
Label1.Text = tstTime;
Вот как вы можете привязать свой выпадающий список :
System.Collections.ObjectModel.ReadOnlyCollection<TimeZoneInfo> TimeZoneColl = TimeZoneInfo.GetSystemTimeZones();
ddlTimeZones.DataSource = TimeZoneColl;
ddlTimeZones.DataTextField = "StandardName";
ddlTimeZones.DataValueField = "Id";
ddlTimeZones.DataBind();
Это рабочий пример :
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
System.Collections.ObjectModel.ReadOnlyCollection<TimeZoneInfo> TimeZoneColl = TimeZoneInfo.GetSystemTimeZones();
ddlTimeZones.DataSource = TimeZoneColl;
ddlTimeZones.DataTextField = "StandardName";
ddlTimeZones.DataValueField = "Id";
ddlTimeZones.DataBind();
}
else
{
ShowTime();
}
}
private void ShowTime()
{
DateTime thisTime = DateTime.Now;
TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById(ddlTimeZones.SelectedValue);
DateTime tstTime = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst);
lblShowTime.Text = tstTime.ToShortTimeString();
}
}
Добавьте только выпадающий список на странице с именем «ddlTimeZones» и метку с именем lblShowTime.
Надеюсь, это поможет…
Комментарии:
1. сэр, может быть ошибка в TimeZoneInfo tst =TimeZoneInfo.FindSystemTimeZoneById(выпадающий список 2.Выбранное значение);
2. Что такое SelectedValue? это должно быть похоже на это «Тихоокеанское стандартное время». И вы можете получить все эти значения с помощью вызова System. Коллекции. Объектная модель. ReadOnlyCollection<TimeZoneInfo> TimeZoneColl = TimeZoneInfo.GetSystemTimeZones();
3. TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById(выпадающий список 2.выбранное значение); DateTime tstTime = TimeZoneInfo. ConvertTime (это время, TimeZoneInfo.Local, tst); Label1. Text = tstTime;
4. Система. Коллекции. Объектная модель. ReadOnlyCollection<TimeZoneInfo> TimeZoneColl = TimeZoneInfo.GetSystemTimeZones(); выпадающий список 2.Источник данных = TimeZoneColl; Выпадающий список 2.DataBind();
5. это я добавляю для привязки выпадающего списка