Hidden input for Dictionary in ASP.NET MVC 3 -
i need model properties in post action, need hidden element them, have problem type of dictionary <string, string>
. model:
public class viewmodel{ ... public viewpart viewpart { get; set; } } public class viewpart { ... public dictionary<string, string> flags { get; set; } }
and controller:
dictionary<string, string> flags = new dictionary<string, string>(); flags.add("kind", "edit"); flags.add("command", "save"); viewmodel model = new viewmodel(){ flags = flags }; return view(model);
in view:
@foreach(var item in model.viewpart.flags) { <input type="hidden" id="viewpart_flags_@(item.key)" value="@item.value" name="viewpart.flags[@(item.key)]" /> }
also try 1 :
@foreach(var item in model.viewpart.flags) { @html.hiddenfor(modelitem => item) }
update post action:
[httppost] public actionresult mypostaction(viewmodel model){ //model.viewpart.flags null }
but in post action flags
null, why? fault? there better way pass variables view action?
you need 2 hidden fields 1 key
, 1 value
if want modelbind dictionary:
var index = 0; foreach (var item in model.viewpart.flags) { <input type="hidden" value="@item.key" name="viewpart.flags[@(index)].key"/> <input type="hidden" value="@item.value" name="viewpart.flags[@(index)].value"/> index++; } <input type="submit" value="save"/>
note, need running index make model binder happy.
or if don't want have running can solve addtional hidden index
field:
foreach (var item in model.viewpart.flags) { <input type="hidden" value="@item.key" name="viewpart.flags.index"/> <input type="hidden" value="@item.key" name="viewpart.flags[@(item.key)].key" /> <input type="hidden" value="@item.value" name="viewpart.flags[@(item.key)].value" /> } <input type="submit" value="save"/> }
you can find lots of info modelbinding collections in 2 article:
Comments
Post a Comment