如何在 MVC 中绑定时区信息
本文关键字:绑定 定时区 信息 MVC | 更新日期: 2023-09-27 18:35:55
我有以下用于模型的类:
public class ApplicationUser
{
public int? UserId { get; set; }
public TimeZoneInfo TimeZoneDefault { get; set; }
public string Username { get; set; }
[...]
}
在视图中,我有以下代码成功创建下拉列表:
@model Acme.ApplicationUser
@{
var timeZoneList = TimeZoneInfo
.GetSystemTimeZones()
.Select(t => new SelectListItem
{
Text = t.DisplayName,
Value = t.Id,
Selected = Model != null && t.Id == Model.TimeZoneDefault.Id
});
}
在表单中调用它:
<table>
[....]
<tr>
<td>
@Html.LabelFor(model => model.TimeZoneDefault, "Default Time Zone:")</strong> </td>
<td>
@Html.DropDownListFor(model => model.TimeZoneDefault, timeZoneList)
<input type="submit" value="Save" />
</td>
</tr>
</table>
一切都显示正确,问题又回到控制器上,我有这个:
[HttpPost]
public ActionResult Profile(ApplicationUser model)
{
if (ModelState.IsValid)
{
model.Save();
}
return View();
}
模型状态在回发时无效,错误为:
System.InvalidOperationException:从类型转换的参数 键入"System.TimeZoneInfo"的"System.String"失败,因为没有类型 转换器可以在这些类型之间进行转换。
我需要做什么才能将所选值转换回时区信息?
如果您不想使用自定义活页夹,您可以使用此技巧:
// Model
public class test
{
public string TimeZoneId { get; set; }
public TimeZoneInfo TimeZone
{
get { return TimeZoneInfo.FindSystemTimeZoneById(TimeZoneId); }
set { TimeZoneId = value.Id; }
}
}
在您看来,绑定到TimeZoneId
:
@Html.DropDownListFor(m => m.TimeZoneId, timeZoneList)