2017-04-07 127 views
0

我见过几种可能的解决方案,但他们看起来很乱。有没有人有这个简单的解决方案?将键值对传递给控制器​​

型号:在控制器

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

Get方法:

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; 
      .... 
     } 

键值对是不是跟这个方法传递,因为它刚刚出现空。将Field传递给控制器​​的最简单方法是什么?

+0

隐藏字段的值是什么? Model.Field null或kvp? – Amy

回答

0

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

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

TO

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

我原来是这样的,它没有工作。 – BMills

0

如果记错,它有一个键和值属性,像任何其他对象将被绑定,如:

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

一个输入字段可以” t代表这种方式的关键和价值,除非您使用Custom Model Binder来管理返回的值,并且Display/Editor template以模型联编程序将理解的方式呈现输入。

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更新中得到这个好消息,我们可以更轻松地完成这样的事情。