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 是 FormsCollection 中使用的键,它将为您提供从 HTML 设置的值。

于 2012-07-20T14:28:30.980 回答