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

相關問題