2011-11-18 39 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