0

InputName /InputValueの形式でKey/Valueディクショナリ入力にバインドすることは可能ですか?

4

2 に答える 2

1

フォームの値が必要List<KeyValuePair<string,string>>な場合は、カスタムモデルバインダーの場合と同じようにアクションメソッドを実行する必要があります。

public class CustomModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var form = controllerContext.HttpContext.Request.Form;  
        return form.Cast<string>().Select(s => new KeyValuePair<string,string>(s, form[s])).ToList();
    }
}

[HttpPost]
public ActionResult Save(List<KeyValuePair<string,string>> form)
{
  ...
}

あなたが他のオプションで大丈夫ならFormCollection、@Tommyが提案したようにあなたは行くことができます。ちなみに、FormCollectionフォームから送信されたすべての値を含む組み込みの辞書クラスがあります。

フォームフィールド名として名前を持つプロパティを持つ単純なクラスを作成することもできます。デフォルトのモデルバインダーは、クラスの値を自動的にインスタンス化して設定し、アクションに提供します。これは、人々が通常従うアプローチです。

于 2012-07-20T15:47:17.967 に答える
0

アクションメソッドに適切なパラメーターを渡せば、MVCはすでにこれを実行しています。 注-アクションメソッドでは、強く型付けされたビューとモデルを使用することを強くお勧めします。

そうは言っても、メソッドシグネチャが以下を使用する場合:

public ActionResult MyMethod(FormsCollection MyFormValues)

次に、コードで次を使用できます

var myFormValue = MyFormValues("InputName");

ここで、InputNameは、HTMLから設定された値を提供するFormsCollectionから使用されるキーです。

于 2012-07-20T14:28:30.980 に答える