我正在构建一个MVC 3应用程序,其中用户可能不在同一时区,因此我的意图是以UTC格式存储所有内容,并在视图中将UTC转换为本地时间,并在提交时将本地时间转换为UTC.
做一些浏览虽然似乎没有很多好的解决方案.说实话,我有点期望一个属性可用于将UTC时间自动转换为本地时间,但似乎不存在.
我觉得只是努力将每个输入手动转换为UTC并手动将每个视图转换为本地时间显示将非常容易出错并导致难以检测到时间未转换为或未转换的错误.
关于如何将此作为一般策略的任何建议?
编辑 每个人似乎都非常坚持"如何获得客户端时区"这篇文章,正如我在其中一篇评论中提到的那样,并不是我关注的问题.我很好用一个用户设置确定他们的时区,所以假设我已经知道客户端时区是什么...这不能解决我的问题.
现在,在我渲染日期的每个视图上,我需要调用一个方法来从utc在本地时区渲染它.每次我向服务器发送提交日期时,我都需要将其从本地时区转换为UTC.如果我忘记这样做会有问题...提交的日期将是错误的或客户端报告和过滤器将是错误的.
我希望存在的是一种更自动化的方法,特别是因为视图模型在MVC 3中强类型我希望sum魔术能够至少自动在时区中呈现,如果不处理提交,就像日期格式或范围可以由属性控制.
所以喜欢
[DateRange]
Public DateTime MyDate
Run Code Online (Sandbox Code Playgroud)
我可以有类似的东西
[ConvertToUTC(offset)]
Public DateTime MyDate
Run Code Online (Sandbox Code Playgroud)
无论如何,我想我的唯一方法就是编写自定义数据注释以在时区中呈现它,并在MVC 3模型绑定器上覆盖,以便转换传入日期,除非我想在方法中包装任何日期呼叫.因此,除非有人有进一步的意见或建议,否则它将是这两个选项中的一个,我只是惊讶于已经不存在的事情.
如果我确实实施了解决方案,我一定会发布它.
编辑2 像这样的 http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx用于MVC 3视图和视图模型是我正在寻找的.
最终编辑 我将epignosisx的答案标记为正确,但也有一些评论要添加.我在这里发现了类似的东西: http: //dalldorf.com/blog/2011/06/mvc3-timezones-1/ 通过将时区放在cookie中为第2部分中需要的人提供时区的实现(链接如下,因为文章第一部分到第2部分的链接不起作用) http://dalldorf.com/blog/2011/09/mvc3-timezones-2/
重要的是要注意这些方法,你必须使用Editfor和Displayfor而不是像TextForFor这样的东西,因为只有EditFor和DisplayFor使用元数据提供程序来告诉MVC如何在模型上显示该类型的属性.如果直接在视图中访问模型值(@ Model.MyDate),则不会进行转换.
我正在考虑将一个诊断模式构建添加到我正在编写的应用程序中以计算方法使用和执行时间,类似于dotTrace等许多代码分析器所做的.
我在通过谷歌找到如何实现这一目标的资源方面遇到了一些麻烦; 显然它是可能的,但是有人能指出我如何在.NET中实现类似方法调用计数的一些资源吗?
好的,所以我使用MVCContrib TestHelper对我的控制器进行单元测试,效果很好.
和很多人一样,通过单元测试我真的是指这里的集成测试,我想至少确保我的视图在没有错误的情况下呈现给定模型提供...否则我会错过一大堆与模型基本相关的错误虽然我正在测试控制器(如果模型属性为null,则视图不呈现).
无论如何,我开始试图弄清楚如何做到这一点(也就是谷歌搜索如何做到这一点).似乎最简单的方法是构造一个HTMLHelper并让它只渲染视图(在这种情况下是部分的).
不幸的是,当我尝试使用我的模拟HTMLHelper时,它抱怨说路由数据中没有控制器名称.
果然,我看起来并没有填充控制器RouteData.不幸的是,RouteData.Values RouteValueDictionary是只读的,所以我不能只提供必要的值.
我没有结合HTMLHelper的想法来解决实际渲染视图作为测试的一部分的问题,所以请随意提出替代方案,但请不要建议我使用Selenium,Watin或其他UI测试我的视图测试工具...我希望控件能够执行一些操作,例如操作和恢复某些测试的状态和数据信息,这是我无法使用基于UI的测试.
这是我目前用来尝试渲染部分的代码:
public class FakeView : IView
{
#region IView Members
public void Render(ViewContext viewContext, System.IO.TextWriter writer)
{
throw new NotImplementedException();
}
#endregion
}
public class WebTestUtilities
{
public static void prepareCache()
{
SeedDataManager seed = new SeedDataManager();
seed.CheckSeedDataStatus();
}
public static string RenderRazorViewToString(string viewName, object model, Controller controller)
{
var sb = new StringBuilder();
var memWriter = new StringWriter(sb);
var html = new HtmlHelper(new ViewContext(controller.ControllerContext,
new FakeView(), new ViewDataDictionary(), new TempDataDictionary(), memWriter), …Run Code Online (Sandbox Code Playgroud) 我正在尝试以编程方式验证jar文件未被明显篡改.我有2个用例我想阻止.1)现有类的修改2)在jar中添加新类
我用jarsigner签了罐子.当我用jarsigner验证上述任何一种情况时,它就像我期望的那样工作.
当我尝试以编程方式使用如何验证以编程方式使用jarsigner 签名的jar 或 如何验证自签名jar上的签名时的示例 ? 但是,我没有得到任何SecurityExceptions ...或任何例外.
不确定我做错了什么,因为那些片段似乎对其他人有用.有任何想法吗?这是JDK 1.6 BTW.
编辑:根据下面的要求,代码示例...提供您自己的修改jar :)
JarFile myJar;
try
{
//Insert the full path to the jar here
String libPath = ""
stature = new JarFile(libPath,true);
//Don't really need this right now but was using it to inspect the SHA1 hashes
InputStream is = myJar.getInputStream(myJar.getEntry("META-INF/MANIFEST.MF"));
Manifest man = myJar.getManifest();
is.close();
verifyJar(myJar);
}
catch (IOException ioe)
{
throw new Exception("Cannot load jar file", ioe);
}
private void verifyJar(JarFile jar) …Run Code Online (Sandbox Code Playgroud) c# ×3
.net ×1
asp.net-mvc ×1
jar-signing ×1
java ×1
javascript ×1
performance ×1
razor ×1
timezone ×1
utc ×1