2011-11-18 37 views
0

我有一個視圖模型ASP.NET MVC ModelBinding - 設置自定義值

public class ViewModel 
{ 
     public string Text { get; set; } 
     public string Name { get; set; } 
} 

的submited形式僅提供文本值。我想在我的自定義模型聯編程序中設置Name屬性。

所以我從DefaultModelBinder類派生了我的自定義模型綁定器,並且重寫了BindModel方法。

問題是僅爲收縮屬性調用BindModel方法。

我的問題是如何在我的cystom模型聯編程序中設置Name值?

回答

0

如果您沒有Name的傳入值,那麼您沒有執行(自定義)模型綁定。相反,你想在動作執行之前在模型對象中提供一些數據,對嗎?如果是這樣,請使用ActionFilter,重寫OnActionExecuting()並將所需的數據提供給操作參數。

public class SupplyNameAttribute : FilterAttribute, IActionFilter 
{ 
public void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    if (filterContext.ActionParameters != null) 
    { 
     foreach (KeyValuePair<string, object> parameter in filterContext.ActionParameters) 
     { 
      if (parameter.Key == "Name") parameter.Value == "Hey"; 
     } 
    }   
} 

}

編輯:

您也可以使用自定義ValueProvider默認模型綁定,請參閱

http://mgolchin.net/posts/19/dive-deep-into-mvc-ivalueprovider

+0

但actionparametr是一個對象,這個名稱屬性可以在許多視圖模型中使用。 – user49126

+0

那麼你必須使用reflecton - 首先用「is」運算符來測試「支持」類型的對象,然後使用反射和設置值查找Name屬性 – rouen

+0

我不明白自定義ValueProvider如何提供幫助?你能解釋一點嗎? – user49126