默認的model binder希望這個網址:
http://localhost:54119/Designs/Multiple?ids=24041&ids=24117
爲了成功地結合到:
public ActionResult Multiple(int[] ids)
{
...
}
如果你想這與逗號分隔值工作,你可以寫一個自定義模式binder:
public class IntArrayModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (value == null || string.IsNullOrEmpty(value.AttemptedValue))
{
return null;
}
return value
.AttemptedValue
.Split(',')
.Select(int.Parse)
.ToArray();
}
}
然後您可以將此模型綁定器應用於某個特定AR行動的說法:
public ActionResult Multiple([ModelBinder(typeof(IntArrayModelBinder))] int[] ids)
{
...
}
或全局應用到所有整數數組參數在Application_Start
在Global.asax
:
ModelBinders.Binders.Add(typeof(int[]), new IntArrayModelBinder());
,現在你的控制器動作可能是這樣的:
public ActionResult Multiple(int[] ids)
{
...
}
我錯過了'[FromUri]'。 'public ActionResult Multiple([FromUri] int [] ids){} **(GET)** – C0d1ngJammer 2017-05-22 13:22:09
@Darin是否有一種方法可以在全局範圍內應用自定義綁定,但只是忽略特定操作?我找不到這樣做的方法:https://stackoverflow.com/questions/45379040/how-to-override-global-model-binder-for-speacific-post-action-mvc5 – akd 2017-07-28 23:59:26