2017-04-07 170 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更新中得到這個好消息,我們可以更輕鬆地完成這樣的事情。