根据c#中的查询字符串切换Div可见性的最佳方法?

时间:2010-09-20 17:13:44

标签: c# enums query-string

我在aspx页面中有大约20个div。在任何时候,只有其中一个可见。我需要根据查询字符串决定显示哪个div。

http://...?mode=<ModeName>

简单的方法是从所有div的不可见开始,然后将QueryString放入switch并为所有可能的ModeNames写出案例(或者在一个大的if-else结构中获取它)

我真的不喜欢硬编码,因为如果将来添加/删除任何div,我需要“记住”在切换div的地方进行必要的更改。

我正在考虑创建一个包含所有名称的枚举并将该枚举传递给函数,以便我可以遍历所有枚举并相应地设置可见性。这样我只需要在顶部枚举声明中添加div名称。但它并没有那么成功(可能我太过于繁琐而不能让它发挥作用)

Switch阻止我的唯一出路吗?有没有人有更好的方法来做到这一点? 提前谢谢!

2 个答案:

答案 0 :(得分:0)

我会做以下部分或全部:

  • 在枚举(public enum ModeNames {View, Edit, Create, Summary ...})中定义窗口的各种模式。使此枚举通用但具有描述性。
  • 公开一个属性DisplayMode,它将QueryString解析为枚举值。您应该控制添加到QueryString的ModeNames,但由于它是查询字符串,因此客户端可以输入他们喜欢的任何内容,我会进行一些错误检查,如果是,则会显示“默认”视图模式QueryString不是预期值之一。
  • 给div一个runat = server和一个ID属性(我猜你已经有了,因为你想用C#而不是JavaScript),在你的Page_PreRender处理程序中,设置每个div的Visible属性(引用通过其作为对象的ID)来评估当前DisplayMode是否应该是该div应该可见的模式之一(例如thisDiv.Visible = new[]{ModeNames.Create, ModeNames.Edit}.Contains(DisplayMode))。
  • 或者,您可以在标记中执行此操作,方法是通过使用评估DisplayMode的类似内联表达式指定div的Visible属性(作为服务器端对象),或者通过包含OnLoad JavaScript div的处理程序(不再必须是服务器端)使用DOM设置可见性,基于相同的内联C#表达式。

答案 1 :(得分:0)

我建议设置querystring传递的数据与你想要处理的div的名称(和id)之间的关系。

您应该知道的其余部分,使用脚本管理器执行Javascript代码以隐藏/显示正确的div,具体取决于您从查询字符串中读取的内容,

希望有所帮助,