在我的 C# asp.net webform 上,我有一个搜索页面,其中包含大约 20 个“可以”用作搜索的一部分的元素。以后还会有更多的补充。
我所做的是扩展文本框和下拉列表框以包含一些变量:
fieldname: Tablename.columnname dbtype: DbType.Int32 Joinparam: LEFT Join on otherTable ON xy = ab
这些都存储在视图状态中并重新加载。我这样做的原因是我可以遍历所有控件并拉出所有属于我的类型的控件。然后我可以验证它们以确保它们有输入并且是正确的类型。如果是这样,我可以将它们传递给数据库访问层,让代码动态生成 SQL 语句。
除了 SELECT 语句之外,我不会让任何事情发生。选择和返回的字段不能更改,我使用 db 参数来尝试避免 sql 注入。
我担心的是我将在搜索条件中使用的表和字段名称以及所需的 JOINS 都放在视图状态中。这是一个真正的坏主意吗?
我可以通过在数据库中保存这些信息的表中添加一些 int 索引来掩盖这一点,但这仍然需要放入视图状态,这意味着它们将有一个额外的层来计算。
我采用这种方法的原因是我不想在 DB 层中放置大量的 IF 语句来在那里构建语句。这将是丑陋的地狱和痛苦的维护。
感谢您对此的任何建议。
乔恩
编辑
谢谢大家的建议。谢天谢地,这个应用程序只是一个内部的东西,所以损害是有限的。但我永远不会再使用这种技术,而是会研究搜索模板的想法。
干杯:)