カスタムモデルバインドはこのように遊ぶことができます
4471 ワード
リストをバインドする機能があります.テストをしました:
モデル:
コントローラ:
カスタムモデルバインド:
Global.asax.cs:
これにより,カスタムモデルバインディング器により,クライアントにN個のUserビューモデルがある場合,コントローラの方法で自動的にバインディングが可能となり,所望の効果が得られる.
@using (Html.BeginForm("save", "user"))
{
<div>
:<input type="text" name="UserName" /><br />
:<input type="text" name="UserName" /><br />
<input type="submit" value="submit" />
</div>
}
モデル:
public class User
{
public string UserName { get; set; }
}
コントローラ:
public ActionResult Save(List<Models.User> users)
{
return Content("success");
}
カスタムモデルバインド:
public class UsersBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
string[] userNames = controllerContext.RequestContext.HttpContext.Request.Form.GetValues("username");
List<Models.User> users = new List<Models.User>();
Models.User user;
foreach (var item in userNames)
{
user = new Models.User
{
UserName = item
};
users.Add(user);
}
return users;
}
}
Global.asax.cs:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
ModelBinders.Binders.Add(typeof(List<Models.User>), new Extend.UsersBinder());
}
これにより,カスタムモデルバインディング器により,クライアントにN個のUserビューモデルがある場合,コントローラの方法で自動的にバインディングが可能となり,所望の効果が得られる.