我已经看过几种可能的解决方案,但它们看起来非常混乱。有人有一个简单的解决方案吗?
型号:
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;传递给控制器?
答案 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更新中获得幸福新闻,我们可以更容易地做到这一点。