使用此模型有哪些优点/缺点
<asp:GridView Id="grdEmployees" runat="server" DataSourceID="objEmployees">
...
</asp:GridView>
与以编程方式创建控件并将数据绑定到它们等相比......?
在哪种情况下应该使用每种方法?
答案 0 :(得分:2)
这里没有对错 - 这取决于你想要达到的目标。
当您知道您的布局不会发生变化(即具有固定列数的网格),或任何其他内容时,您可以安全地使用静态控件未来可能的变化可能是静态的(网格中的新列)。这种方法非常精细,在普通的现实世界中显然更快。
如果您需要灵活性,则需要以编程方式生成控件(即您需要生成可变数量的网格 - 或任何其他控件)。为了灵活性,我们的意思是您的布局需要考虑到运行时才能知道的变量值。
答案 1 :(得分:1)
我发现两种模型的用途,但我倾向于尝试在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页面中创建标记控件,然后将它们绑定到您在代码隐藏中填充的自定义DataSet。
答案 2 :(得分:0)
UI状态应该只影响它所代表的业务流程。因此,您应该希望让UI自动更新为业务模型中的更改。如果您手动编程UI,那么您更有可能遇到业务模型状态未准确反映的情况。以声明方式对UI进行编程可以消除大部分问题。尽可能使用声明性方法。