【问题标题】:Custom class for extracting data from the formcollection in a postback in ASP.net MVC用于在 ASP.net MVC 的回发中从表单集合中提取数据的自定义类
【发布时间】:2011-03-11 08:43:53
【问题描述】:

我一直想知道从表单集合中生成强类型对象以从中提取数据的可能性。

也就是说,是否可以根据formcollection对象中的键生成一个类?

例如: 假设您有一个带有“ID3”键和“false”值的复选框。 并且会写:

bool CheckBox = FormObj.ID3.GetValue();

我意识到这可能不是世界上最有用的东西,但仍然很有趣。

我猜这是语言限制。

对此有什么想法吗?

编辑:

好的,所以如果我有一个列表(长度未知)并在我的视图中执行 foreach 并获得复选框,我将如何将它们绑定到我的控制器中?

    <% foreach (var item in Model.AllAttributes)
   { %>
<tr>
    <td>
        <%: Html.CheckBox(item.AttributeID.ToString(), item.Chosen) %>
    </td>
    <td>
        <%: item.AttributeTitle %>
    </td>
    <td>
        <%: item.Category.CategoryName %>
    </td>
</tr>
<% } %>

我在控制器中放了什么?

【问题讨论】:

  • 你不应该使用FormCollection - 那是给孩子们的。改用强类型模型、视图模型和模型绑定。它将使您的 ASP.NET MVC 体验好多更好。 :) 此外,MVC 中不存在“回发”的概念——表单帖子就是表单帖子。除了从客户端发送到服务器的内容之外,没有其他状态,因此称为 REST。 :)

标签: asp.net-mvc c#-4.0 postback formcollection


【解决方案1】:

是的,它由 ModelBinder 完成,DefaultModelBinder 类适用于大多数 .NET Framework 类型,包括数组和 IList、ICollection 和 IDictionary 对象,但如果需要,您可以创建自己的 ModelBinder。查看this MSDN post了解更多详情。

您的控制器操作将是这样的

        [HttpPost]
        public ActionResult Create(Dinner dinner)
        {
            if (ModelState.IsValid)
            {
                int id = dinner.ID;
                ...
                ...

【讨论】:

  • 好的,我已经编辑了我的帖子。因此,如果我将我的复选框命名为 '"ID" + item.ID',我将如何提取布尔值?
【解决方案2】:

关于您的编辑:。

你必须有以下课程:

Attribute
{
    bool AttributeID;
    string AttributeTitle;
    cat Category;

}

在您的模型中(例如晚餐)。你会有一个

IEnumerable<Attribute> AllAttributes;

然后在控制器中你可以访问它:

[HttpPost]
        public ActionResult Create(Dinner dinner)
        {
            if (ModelState.IsValid)
            {
                 bool id = dinner.AllAttributes[0].AttributeID;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    相关资源
    最近更新 更多