我正在开发一个CRUD网站,其中包含许多非常相似的表单,用于添加新数据。换句话说:
AddMovie.aspx,AddGame.aspx,AddBeer.aspx,AddAdd.aspx
我一直在想,“自我,拥有一个Add.aspx而不是重写那么多类似的页面真的很好 - 加上所有那些OOP书呆子会认为我很酷我重复使用而不是复制/粘贴!“
所以假设我在正确的轨道上,如果我使用单个Add.aspx页面,我怎么能代表每个对象的所有字段集?我想到了一堆我可以隐藏/显示的面板或div,但不确定我是否真的喜欢这个解决方案。有没有更好的方法呢?或者我应该放弃并回到多个错误的'添加对象 .aspx页面?
此外,这是一个简单的ol'(3.5)网络表单应用程序。遗憾的是,对于这个没有ASP.NET MVC的善良。似乎应该有这样一个简单的解决方案,我只是过度思考,但我无法想出一个,所以我转向Stack Overflow。 :)
答案 0 :(得分:4)
也许你应该看看ASP.NET dynamic data或subsonic project。两者都允许非常快速地构建CRUD类型的网站,因为它们支持“脚手架”(编辑页面是根据您的数据库模型自动生成的)。
答案 1 :(得分:2)
更好的方法可能是让一个名为Add.aspx的页面然后根据你发送它的查询字符串(即Add.asps?type = game)你可以自定义表单和特定类型的逻辑你试图使用的对象。
答案 2 :(得分:1)
另一种选择是继承Page,然后让你的页面继承它,所以你有一个地方拥有所有常见的功能。
例如:
public abstract class BasePage<T> : System.Web.UI.Page
{
protected T GetObjectById(int objectId)
{
// return new T();
}
protected void SaveObject(T obj)
{
// Save object to DB here
}
protected void DeleteObjectById(int objectId)
{
// Delete object
}
protected abstract void PopulateUI(T obj);
protected override void OnLoad(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
int objectId = Convert.ToInt32(Request.QueryString.Get("id"));
T obj = GetObjectById(objectId);
PopulateUI(obj);
}
}
}
您的网页将继承此内容:
public class AddGame : BasePage<Game>
{
protected override void PopulateUI(Game game)
{
// Populate the UI with game information
GameNameTextBox.Text = game.Name;
PublisherNameTextBox.Text = game.Publisher.Name;
// etc
}
}
这样可以更快更轻松地创建页面,并让您更好地控制数据的检索和保存方式。