オブジェクトが既定のモデル バインダーによって正しくバインドされるためには、既定のパラメーターなしのコンストラクターが必要です。
public class EMailAddress
{
public string Address { get; set; }
}
モデルを示したものとして使用したい場合は、変換を処理するカスタム モデル バインダーを作成する必要があります。
public class EmailModelBinder : DefaultModelBinder
{
public override object BindModel(
ControllerContext controllerContext,
ModelBindingContext bindingContext
)
{
var email = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (email != null)
{
return new EMailAddress(email.AttemptedValue);
}
return new EMailAddress(string.Empty);
}
}
に登録されApplication_Start
ます:
ModelBinders.Binders.Add(typeof(EMailAddress), new EmailModelBinder());
次のように使用します。
public class HomeController : Controller
{
public ActionResult Index(EMailAddress email)
{
return View();
}
}
クエリを実行/Home/Index?email=foo@bar.baz
すると、アクション パラメータが適切にバインドされます。
ここで問題は、最初に示したようなビュー モデルを使用できる場合、このすべてのコードを本当に書きたいと思うかということです。