根据c#中的查询字符串切换Div可见性的最佳方法?
我在aspx页面上有大约20个div。在任何时候,它们中只有一个是可见的。我需要根据查询字符串决定显示哪个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的地方做必要的更改 我正在
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#表达式
希望这会有所帮助,只是一个观察结果-根据问题的不同,只发送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先生/女士提交他的评论作为答案,但因为他没有,而且如果他没有发表评论,我会选择这个,所以我将此标记为正确答案。