可以使用Html.Hidden()将哪种类型的对象发送回动作方法

时间:2010-04-14 10:36:00

标签: asp.net-mvc

1)假设我有这种形式:

<% Using(Html.BeginForm()) { %>
<%= Html.Hidden("myObject", 
                   (cast to the appropriate type)ViewData["KeyForMyObject"] %>     
<input type = "submit" "Submit Object">
<% } %>

2)这是应该拦截对象值的Action

public ActionResult MyAction(Type myObject)
{
    //Do Something with the object 
}

以下是我的问题:隐藏字段可以支持哪些类型的对象?

事实上,当 ViewData [“KeyForMyObject”] 包含字符串,int或bool时, myAction 可以检索该值。

但是,当谈到对象时,例如列表字典,没有任何反应。当我调试以检查本地值时,我在MyMethod中看到键入myObject 的null。

那么当涉及列表或词典时,MVC中的规则是什么?

<小时/> EDIT

为了简单起见,我可以写这样的东西

<%= Html.Hidden("contactDic", (Dictionary<string, string>)ViewData["contacts"]) %>

并希望在动作方法中检索字典

public ActionResult myMethod(Dictionary<string, string> contactDic)
{
    // Do something with the dictionary
}

感谢帮助

2 个答案:

答案 0 :(得分:0)

列表的表示法有点复杂。

如果您想要第一项标题

,请使用[0].Title之类的内容

请参阅http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

答案 1 :(得分:0)

目前的问题是我问过的很多问题之一。它们都有一个共同点:我试图保持我的数据状态( Multistes / Wizard like application )。所以我试图使用诸如 ModelState.Clear()之类的语句来清除ViewData的内容。

现在我意识到我正在以ViewData的方式工作(e.i. MVC本身)。总而言之,为了保持对象的状态,我需要序列化/反序列化对象。

我找到的最好的样本是多步骤向导p.396-406“Pro ASP.NET MVC / Steve Sanderson / Apress

另见how to stimulate a ViewState

看起来我只是在不知道如何表达自己的情况下发现了我在寻找的东西。

由于