6

モデルに使用している次のクラスがあります。

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 に変換するにはどうすればよいですか?

4

1 に答える 1