将键值对传递给控制器

时间:2017-04-07 17:01:00

标签: c# asp.net-mvc

我已经看过几种可能的解决方案,但它们看起来非常混乱。有人有一个简单的解决方案吗?

型号:

 public class MyClass
    {       
        public KeyValuePair<int,string> Field { get; set; }
    }

在控制器中获取方法:

  public ActionResult Index()
    {
        var model = new MyClass();
        model.Field = new KeyValuePair<int, string>(1, "test");

        return View(model);
    }

查看:

@model WebApplication1.Models.MyClass

@using (Html.BeginForm("MyMethod", "Home", FormMethod.Post))
{       
   @Html.Hidden("Field", Model.Field);

    <input type="submit" value="Submit" />
}

在控制器中发布方法:

public ActionResult MyMethod(MyClass input)
        {
            var x = input.Field;
            ....
        }

Key Value对不会通过此方法传递,因为它只是空白。什么是最简单的方式获得&#39; Field&#39;传递给控制器​​?

3 个答案:

答案 0 :(得分:0)

替换以下行并尝试它。我知道任何问题。

@Html.Hidden("Field", Model.Field);

TO

@Html.HiddenFor(m => m.Field);

答案 1 :(得分:0)

如果内存正确,它有一个Key和Value属性,就像任何其他对象一样绑定:

@Html.HiddenFor(m => m.Field.Key)
@Html.HiddenFor(m => m.Field.Value)

一个输入字段不能以这种方式表示键和值,除非您查看使用Custom Model Binder来管理回发的值,并使用Display/Editor template来呈现输入模型绑定器将理解的方式。

答案 2 :(得分:0)

按照Brians的回答,我必须接受我必须这样做:

类别:

public class MyClass
    {

        public KeyValuePair<int,string> Field { get; set; }
        public string FieldKey { get; set; }
        public string FieldValue { get; set; }
    }

查看:

@Html.Hidden("FieldKey",Model.Field.Key)
@Html.Hidden("FieldValue", Model.Field.Value)

因为我有许多这样的kvp我想要传回控制器,所以它会变得混乱,但我想这是唯一不复杂的方式。这不是我第一次希望将对象传递给控制器​​,而且我确信它不会是最后一个。也许有一天我们会在dotnet更新中获得幸福新闻,我们可以更容易地做到这一点。