将隐藏的模型列表添加到Razor表单

时间:2013-04-16 15:44:22

标签: c# asp.net-mvc asp.net-mvc-3 razor html-helper

我正在创建一个向导,我需要传播我创建的列表。该列表属于我的联系人模型。我需要将其放在表单中,这样当我在最后一步回发到控制器时,我可以将联系人列表作为向导模型的一部分(它现在只返回null)。对于其他简单的表单对象,我使用HiddenFor来保存模型中的数据。这不起作用,因为隐藏的只是一个文本框,我有一个复杂的对象。

我考虑创建一个DropDownListFor并将其包装在隐藏的div中。这只是拼凑而成,实际上需要花费一些工作才能让DropDownListFor接受另一种对象类型(如果它可以工作的话)。

我考虑将列表保存到Session [“Contacts”],但这似乎不是正确的MVC方式。有没有人有更好的建议?

谢谢, TJ

- UPDATE -

在回应merekel时,我正在添加更多细节以澄清我遇到问题的地方。此列表不会被用户修改,也不会显示在表单上。我在我的一个向导步骤中创建列表并将其保存到我的模型中。

查看模型

public class WizardViewModel
{
    //...
    public List<Contact> ContactList { get; set; }
    //...
}

控制器代码

//Step 4 in the wizard
model.ContactList = CALL FUNCTION THAT CREATES LIST BASED ON FORM SELECTIONS

//other calculations needed for step 5

//Save Contacts for later
Session["Contacts"] = model.ContactList;


//Step 5 in the wizard

//Readd the contacts to the model
model.ContactList = (List<Contact>)Session["Contacts"];

//Save the model to pass to the report page
//My report viewer is on an ASPX page so I am passing all the data here with a session
Session["ReportModel"] = model;

会话保存按预期工作。我似乎不应该使用会话来使用MVC从页面到页面保存数据。我需要从MVC转到ASPX,所以我不担心Session [“ReportModel”]只有Session [“Contacts”]。感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

我相信这样的帖子有助于12。关于如何回发列表,有很多类似的帖子。

这些联系人是从您的表单填充还是全局联系人?