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

根据c#中的查询字符串切换Div可见性的最佳方法?,c#,enums,query-string,C#,Enums,Query String,我在aspx页面上有大约20个div。在任何时候,它们中只有一个是可见的。我需要根据查询字符串决定显示哪个div http://...?mode=<ModeName> http://...?mode= 简单的方法是从所有div都不可见开始,然后将QueryString放入switch并写出所有可能的modename的case(或者将其放入一个大的if-else结构中) 我真的不喜欢硬编码,因为如果将来我添加/删除任何div,那么我需要“记住”在切换div的地方做必要的更改 我正在

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

http://...?mode=<ModeName>
http://...?mode=
简单的方法是从所有div都不可见开始,然后将QueryString放入switch并写出所有可能的modename的case(或者将其放入一个大的if-else结构中)

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

我正在考虑创建一个包含所有名称的枚举,并将该枚举传递给函数,以便迭代所有枚举并相应地设置可见性。这样,我只需要在顶部枚举声明中添加div名称。但结果并不是这样(可能是我太烦躁了,无法让它工作)

这是我唯一的出路吗?有人有更好的方法吗?
提前谢谢

我将执行以下部分或全部操作:

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

我建议在querystring中传递的数据与要处理的div的名称(和id)之间设置一个关系

您应该知道的是,根据从querystring读取的内容,使用scriptmanager执行Javascript代码来隐藏/显示适当的div


希望这会有所帮助,

只是一个观察结果-根据问题的不同,只发送1个DIV而不是全部20个DIV是有意义的:1)因为您知道根据QueryString显示哪个DIV,所以您可以在服务器端处理所有事情;2) 如果您真的想在客户端做出决定,可以根据需要使用AJAX加载所需的DIV。在c#(服务器端)中,如果枚举器值是DIV name模式的一部分,则可以避免切换块。检查:Enum.GetNames(),Enum.Parse(),Enum.ToString()@DK:我尝试过你的方法,它正是我想要的方式。没有开关,没有if-else,我现在只需要使用System.Enum.GetNames()遍历所有枚举并使用FindControl()访问控件并设置可见性。当然,我正在检查空条件,以及可能发生的其他一些异常。非常感谢,你能重新提交你的评论作为答案吗?这样我就可以把它标记为我想要的答案了?谢谢实际上我想在服务器端这样做,因为我不想在div不可见时处理所有信息!谢谢你!这看起来是一个很好的方法,如果我没有DK关于Enum.Getnames()的评论,我会选择这个。谢谢你!我一直在等待DK先生/女士提交他的评论作为答案,但因为他没有,而且如果他没有发表评论,我会选择这个,所以我将此标记为正确答案。