0

我正在一个 CRUD 网站上工作,其中有很多非常相似的表格来添加新数据。换句话说:

AddMovie.aspx、AddGame.aspx、AddBeer.aspx、AddAdd.aspx

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

因此,假设我走在正确的轨道上,如果我要使用单个 Add.aspx 页面,我如何表示每个对象的所有字段集?我想过一堆可以隐藏/显示的面板或 div,但不确定我是否真的喜欢那个解决方案。有没有更好的方法,或者我应该放弃并返回多个错误的“添加对象.aspx”页面?

此外,这是一个普通的 ol' (3.5) Web 表单应用程序。遗憾的是,这没有 ASP.NET MVC 的优点。似乎应该有这样一个微不足道的解决方案,而我只是想多了,但我想不出一个,所以我求助于 Stack Overflow。:)

4

3 回答 3

4

也许你应该看看ASP.NET 动态数据subsonic 项目。两者都允许非常快速地构建 CRUD 类型的网站,因为它们支持“脚手架”(编辑页面是根据您的数据库模型自动生成的)。

于 2009-04-20T23:11:53.740 回答
2

更好的方法可能是创建一个名为 Add.aspx 的页面,然后根据您发送的查询字符串(即 Add.asps?type=game),您可以自定义表单和特定类型对象的逻辑试图与之合作。

于 2009-04-20T23:10:16.520 回答
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
    }
}

这应该使创建页面变得更快更容易,并让您更好地控制数据的检索和保存方式。

于 2009-04-21T00:23:45.907 回答