ASP.NET MVC ModelBinding - 设置自定义值

时间:2011-11-18 10:31:44

标签: asp.net-mvc model-binding

我有一个视图模型

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

提交的表单仅提供Text值。我想在自定义模型绑定器中设置Name属性。

所以我从DefaultModelBinder类派生了我的自定义模型绑定器并覆盖了BindModel方法。

问题是BindModel方法仅针对incomning属性调用。

我的问题是如何在我的cystom模型绑定器中设置Name值?

1 个答案:

答案 0 :(得分: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