创建大量.aspx页面以将数据添加到各种表。有没有更好的办法?

时间:2009-04-20 23:06:44

标签: asp.net webforms crud code-reuse

我正在开发一个CRUD网站,其中包含许多非常相似的表单,用于添加新数据。换句话说:

AddMovie.aspx,AddGame.aspx,AddBeer.aspx,AddAdd.aspx

我一直在想,“自我,拥有一个Add.aspx而不是重写那么多类似的页面真的很好 - 加上所有那些OOP书呆子会认为我很酷我重复使用而不是复制/粘贴!

所以假设我在正确的轨道上,如果我使用单个Add.aspx页面,我怎么能代表每个对象的所有字段集?我想到了一堆我可以隐藏/显示的面板或div,但不确定我是否真的喜欢这个解决方案。有没有更好的方法呢?或者我应该放弃并回到多个错误的'添加对象 .aspx页面?

此外,这是一个简单的ol'(3.5)网络表单应用程序。遗憾的是,对于这个没有ASP.NET MVC的善良。似乎应该有这样一个简单的解决方案,我只是过度思考,但我无法想出一个,所以我转向Stack Overflow。 :)

3 个答案:

答案 0 :(得分:4)

也许你应该看看ASP.NET dynamic datasubsonic 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
    }
}

这样可以更快更轻松地创建页面,并让您更好地控制数据的检索和保存方式。