在ASP.Net中使用声明式方法和编程式方法的优缺点是什么?

在ASP.Net中使用声明式方法和编程式方法的优缺点是什么?,asp.net,Asp.net,使用这种模式的优点/缺点是什么 <asp:GridView Id="grdEmployees" runat="server" DataSourceID="objEmployees"> ... </asp:GridView> ... 与以编程方式创建控件并将数据绑定到控件等相比 在哪种情况下应该使用每种方法?UI状态应该只受其所代表的业务流程的影响。因此,您应该渴望让UI自动更新以适应业务模型中的变化。如果您手动编程UI,则更有可能出现无法准确反映业务模型状态

使用这种模式的优点/缺点是什么

<asp:GridView Id="grdEmployees" runat="server" DataSourceID="objEmployees">
    ...
</asp:GridView>

...
与以编程方式创建控件并将数据绑定到控件等相比


在哪种情况下应该使用每种方法?

UI状态应该只受其所代表的业务流程的影响。因此,您应该渴望让UI自动更新以适应业务模型中的变化。如果您手动编程UI,则更有可能出现无法准确反映业务模型状态的情况。以声明方式编程UI消除了大部分这方面的顾虑。在可能的情况下,使用声明性方法。

这里没有对错-这取决于您试图实现的目标

当您知道布局不会发生更改时(即具有固定列数的网格),或者将来可能发生的任何更改都可能是静态的时,您可以安全地使用静态控件(网格中的新列)。这种方法非常好,在现实世界中的平均情况下显然更快


如果需要灵活性,则需要以编程方式生成控件(即,需要生成数量可变的网格或任何其他控件)。为了灵活性,我们的意思是,您的布局需要考虑运行时才能知道的变量值。

我发现这两种模型都有用处,但我倾向于尽量在aspx页面中使用标记,因为它更易于阅读,并帮助我将视图代码与逻辑代码分开。我通过编程创建控件并将数据绑定到它们的位置是在我需要动态数量的控件时。一个很好的例子可能是,当您为用户搜索条件动态生成一组下拉列表时——我会这样做:

SqlDataReader dr;

// Set up database connection and set dr to search query.

while(dr.Read())
{
    Literal name = new Literal();
    name.Text = dr["Name"] + ": ";

    Page.Controls.Add(name);

    DropDownList ddl = new DropDownList();
    ddl.ID = "Search_" + dr["ID"];

    SqlDataReader dr2;

    // Set up database connection and set dr2 to search items query.

    while(dr2.Read())
    {
        ListItem li = new ListItem(dr2["Name"], dr2["Value"]);
        ddl.Item.Add(li);
    }

    Page.Controls.Add(ddl);
}
要记住的另一件事是,您可以在aspx页面中创建标记控件,然后将它们绑定到在代码中填充的自定义数据集