ビューに次の値のテキスト ボックスがあります。
「1、3、5、8」または
「1; 3; 5; 8」。
これらの値を int-array としてコントローラー メソッドにマップすることは可能ですか?
[HttpPost]
public ActionResult AddUsers(int[] values)
{
...
}
ビューに次の値のテキスト ボックスがあります。
「1、3、5、8」または
「1; 3; 5; 8」。
これらの値を int-array としてコントローラー メソッドにマップすることは可能ですか?
[HttpPost]
public ActionResult AddUsers(int[] values)
{
...
}
カスタム モデル バインダーを作成できます。クラスを追加し、たとえばIModelBinderインターフェイスArrayIntModelBinder
を実装します。
public class ArrayIntModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (controllerContext == null)
throw new ArgumentNullException("controllerContext");
if (bindingContext == null)
throw new ArgumentNullException("bindingContext");
string values = bindingContext.ValueProvider.GetValue("values").AttemptedValue;
return Array.ConvertAll(values.Split(new[] { ',', ';' }), int.Parse);
}
}
ビューには、テキストボックスがあります:
@using (Html.BeginForm())
{
<input type="text" name="values"/>
<input type="submit" value="submit"/>
}
新しいモデルバインダーをアクションに適用します
[HttpPost]
public ActionResult AddUsers([ModelBinder(typeof(ArrayIntModelBinder))]int[] values)
{
...
}
でグローバルとして登録することもできますApplication_Start
。
もちろん、このバージョンのモデル バインダーは、アイデアを提供するためだけに非常に単純化されています。少なくとも入力文字列の検証を提供する必要があります。お役に立てれば。
URL は次のようになります。JQuery では、TextBox の値に基づいて URL を準備できます。
http://abc.com/ControllerName/ActionName/?id=1&id=2
アクション方法
[HttpPost]
public ActionResult Index(int[] id)
{
}