我创建了一个自定义字符串对象,但是当我将其发布回服务器时它没有模型绑定。是否有我在课堂上缺少的属性或什么?
这是下面的自定义字符串类:
public class EMailAddress
{
private string _address;
public EMailAddress(string address)
{
_address = address;
}
public static implicit operator EMailAddress(string address)
{
if (address == null)
return null;
return new EMailAddress(address);
}
}
答案 0 :(得分:1)
为了使对象被默认的模型绑定器正确绑定,它必须具有默认的无参数构造函数:
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
时,应正确绑定action参数。
现在的问题是:当你可以将视图模型作为我最初展示的模型时,你真的想要编写所有这些代码吗?