【问题标题】:ASP.NET refering an image or asp file in a Strongly Typed fashionASP.NET 以强类型方式引用图像或 asp 文件
【发布时间】:2012-09-30 05:28:02
【问题描述】:

很多时候我们需要引用服务器上的另一个文件。无论它只是一个图像,还是另一个asp页面。例如:

 if (success)
 {
    img1.ImageUrl = "RightArrow.jpg"
 }

这里的问题是,如果有人不小心将字符串“RightArrow.jpg”更改为“RghtArrow.jpg”,它不会导致编译时错误。并且可能需要很长时间才能注意到运行时错误。

那么这里有什么最佳实践吗? 当然,我可以为此构建自己的小机制……但如果有内置的东西,我会徘徊。

可能是强类型的东西:

img1.ImageUrl = Images.RightArrow;

【问题讨论】:

  • 你可以使用常量。您还可以使用嵌入式资源。
  • 常量不会检查文件是否存在。当然我可以建立一些机制来检查它们是否所有的常量都是有效的文件名..但我正在寻找内置的东西。
  • 那么嵌入式资源和应用设置呢?
  • 我不知道如何使用它,我正在检查它是否对我有好处:)
  • 任何使用 img1 的函数或代码在尝试使用之前都应该确保它存在于目录中。然后您可以处理异常并提示错误或警告或其他任何内容。

标签: c# asp.net strong-typing


【解决方案1】:

为什么不使用设置?如果你这样做了,你的代码将是强类型的,例如:

img1.ImageUrl = Settings.Default.Images.RightArrow

如果您的这些资源数量有限,这可能是一个很好的解决方案,因为您甚至可以在不重新编译的情况下更改路径/名称...

【讨论】:

  • 并不是说这不是一个正确的答案,而是图像并不是真正的设置,所以它们真的应该放在那里吗?这似乎具有误导性,但如果它有效,它就会有效。我仍然会采用@Sean Dunford 的方法,尽管只使用结构。这使您可以将其放置在逻辑上和直观上都有意义的位置
  • 是的,图像不是设置,但是根据其他变量甚至用户选择的选项(例如在设置选项卡中)决定要显示的图像肯定是设置......肖恩的方法会奏效,当然,但你最终会得到不是强类型的硬编码值......
  • @DeanK。有什么机制可以检查文件是否存在?
  • @Letterman 是的,File.Exists 方法 msdn.microsoft.com/en-us/library/…
【解决方案2】:

你能保留一张图片名称列表吗?

List<string> CollectionPictureUri = new List<string>(); 
CollectionPictureUri.Items.Add("RightArrow.jpg"); 

if (success)
 {
    img1.ImageUrl = CollectionPictureUri[0]; 
 }

或者,如果您使用 Map,则键可能只是 [RightArrow]

然后您可以在一个代码块中初始化所有项目,并确保它们在一个地方正确。

编辑: 您还可以使用断言来验证您的字符串是否解析为正确的名称。 http://msdn.microsoft.com/en-us/library/system.diagnostics.debug.assert%28v=vs.110%29.aspx

还有其他可能对您有用的测试技术。使用 Visual Studio,您可以阻止构建代码,直到此类错误得到解决。

【讨论】:

  • 我打算建议一种类似的方法,如果您定义某种图像结构,您可以在一段代码中设置所有路径。然后只需使用结构的“接口”即可访问。
  • @AndrewHagner 这是个好主意。我要说的是使用自定义类,但结构似乎更合适,因为他可能需要的辅助函数数量最少。听起来他只需要某种集合来将所有扩展聚合到一个地方。
  • 这完全是指“我可以为此建立自己的小机制”。这是一个很好的可能解决方案,但我徘徊 - asp.net 不支持针对这个极其常见问题的任何内置解决方案吗?
  • @Letterman 你想避免什么?确保图片存在于文件系统中?或者不使用字符串文字作为文件 URI?您可以使用数据类型 Path 或 URI 来跟踪它。
【解决方案3】:

您始终可以使用 T4 模板为实际存在的文件生成一个带有常量的类。这类似于 T4 MVC 模板对 /Content 目录的脚本和内容所做的事情;它在运行时扫描这些目录,并创建常量。

【讨论】:

    猜你喜欢
    • 2015-06-21
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 2011-05-12
    相关资源
    最近更新 更多