0

ビューに次の値のテキスト ボックスがあります。

「1、3、5、8」または

「1; 3; 5; 8」。

これらの値を int-array としてコントローラー メソッドにマップすることは可能ですか?

[HttpPost]
public ActionResult AddUsers(int[] values)
{
    ...
}
4

2 に答える 2

0

カスタム モデル バインダーを作成できます。クラスを追加し、たとえば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

もちろん、このバージョンのモデル バインダーは、アイデアを提供するためだけに非常に単純化されています。少なくとも入力文字列の検証を提供する必要があります。お役に立てれば。

于 2013-03-29T14:12:00.510 に答える
0

URL は次のようになります。JQuery では、TextBox の値に基づいて URL を準備できます。

http://abc.com/ControllerName/ActionName/?id=1&id=2

アクション方法

[HttpPost]
public ActionResult Index(int[] id)
{
}
于 2013-03-29T13:42:25.500 に答える