【问题标题】:Best way to custom edit records in ASP.NET?在 ASP.NET 中自定义编辑记录的最佳方式?
【发布时间】:2010-09-05 23:26:48
【问题描述】:

我来自 Rails 背景,在 ASP.NET 项目(不是 ASP MVC)上做一些工作。新手问题:为记录表制作自定义编辑器最简单的方法是什么?

例如:我有一堆数据行,并且想要更改每个数据行上的“类别”字段——可能是一个下拉列表,可能是一个链接,也可能是用户输入的。

在 Rails 中,我会遍历行来构建一个表,并且每行都有一个表单。该表单将有一个输入框或下拉菜单,并将数据提交给控制器,例如“/item/edit/15?category=foo”,其中 15 是 itemID,新类别是“foo”。

我是 ASP.NET 模型的新手,我不确定执行此操作的“正确”方法——这只是取回新数据并将其保存的最简单方法。我会制作一个自定义控件并将其附加到每一行吗?任何帮助表示赞赏。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    现在你真的可以作弊,看看 .NET 3.5 SP1 附带的新动态数据。 Scott Guthrie 有一篇博客文章,演示了它在此处为您带来的快速和轻松:

    http://weblogs.asp.net/scottgu/archive/2007/12/14/new-asp-net-dynamic-data-support.aspx

    如果没有获得最先进的技术,我会使用 XSD 生成器来生成与相关表一致的强类型数据集。这还将生成可用于执行所有 CRUD 语句的 TableAdapter。

    从那里,将其绑定到 DataGrid 并利用与之相关的所有标准模板/事件,例如 EditIndex、SelectedIndex、RowEditing、RowUpdated 等。

    我从 .NET 的早期 1.0 天开始就一直在这样做,并且随着框架的每次更新,这种功能只会变得越来越精简。

    编辑:我也想对 Matt Berseth 博客快速点头。我一直在关注他的很多东西,这很棒!

    【讨论】:

      【解决方案2】:

      有一些控件可以为您执行此操作,其复杂程度各不相同,具体取决于它们的相对灵活性。

      执行此操作的传统方法是 DataGrid 控件,它为您提供表格布局。如果您想要外观更灵活的东西,DataList 和 ListView 控件还具有对编辑、插入或删除字段的内置支持。

      查看Matt Berseth's blog 了解一些实际使用的asp.net 控件的优秀示例。

      【讨论】:

        【解决方案3】:

        感谢大家的回答。看起来自定义 DataGrid 是要走的路。对于任何 ASP.NET 新手,这就是我正在做的事情

        <asp:DataGrid ID="GridView1" runat="server" AutoGenerateColumns="False">
            <Columns>
                <asp:BoundColumn DataField="RuleID" Visible="False" HeaderText="RuleID"></asp:BoundColumn>
                <asp:TemplateColumn HeaderText="Category">
                <ItemTemplate>
                    <!-- in case we want to display an image -->
                    <asp:Literal ID="litImage" runat="server">
                    </asp:Literal>
                    <asp:DropDownList ID="categoryListDropdown" runat="server"></asp:DropDownList>
                 </ItemTemplate>
                </asp:TemplateColumn>
        
            </Columns>
        </asp:DataGrid>
        

        这将创建一个数据网格。然后我们可以将它绑定到一个数据源(在我的例子中是 DataTable)并使用像

        这样的东西
        foreach (DataGridItem item in this.GridView1.Items)
        {
             DropDownList categoryListDropdown = ((DropDownList)item.FindControl("categoryListDropdown"));
             categoryListDropdown.Items.AddRange(listItems.ToArray());
        }
        

        填充数据网格中的初始下拉列表。在这种情况下,您还可以访问 item.Cells[0].text 来获取 RuleID。

        我自己的注意事项:ASP.NET 模型在代码隐藏文件中执行所有操作。在较高级别上,您始终可以遍历 GridView1.Items 来获取每一行,并通过 item.findControl("ControlID") 来查询存储在每个项目中的值,例如在按下“更新”按钮之后。

        【讨论】:

          猜你喜欢
          • 2021-10-23
          • 1970-01-01
          • 2012-12-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-08
          • 1970-01-01
          • 2015-05-11
          相关资源
          最近更新 更多