モデルに使用している次のクラスがあります。
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();
}
ポストバックされたときに ModelState が無効です。エラーは次のとおりです。
System.InvalidOperationException: 型 'System.String' から型 'System.TimeZoneInfo' へのパラメーター変換は失敗しました。これらの型間で変換できる型コンバーターがないためです。
選択した値を TimeZoneInfo に変換するにはどうすればよいですか?