1

我创建了一个自定义字符串对象,但是当我将它发回服务器时,它不会造型绑定。在课堂上是否有我缺少的属性?如何在MVC中创建自定义字符串对象modelbind?

这是下面的自定义字符串类:

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); 
    } 
} 

回答

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/[email protected]动作参数应适当约束。

现在的问题是:你是否真的想编写所有这些代码,当你可以有一个视图模型为我最初展示的模型?

+0

是的,这就是我正在寻找Darin的!谢谢! :) – 2011-04-13 15:29:00

相关问题