我最近一直在寻找ASP.NET MVC框架中的最佳实践,特别是关注的关注.我的问题是,如果我在模型上有属性,那么在该属性上进行某些格式化的最佳位置在哪里?
我想过几个选项,但不确定哪个是最好的.该示例使用DateTime.对不起,这有点长.
选项1:
在视图中:@Model.TheDate.String("{0:'blah'dd/MM/yyyy}")
我知道这不对,因为格式字符串不应该在这里(如果我想在整个应用程序中更改格式怎么办)
选项2:
视图中使用的扩展方法:@Model.TheDate.DisplayItNicePlease()
这种方式很有意义,因为视图正在选择用于格式化的扩展方法,而viewmodel只是将date属性公开给视图.不确定视图或视图模型是否应该负责格式化.
选项3: 在Html Helper方法中,例如,我应该在ASP.NET MVC 3中放置声明性HTML帮助器,以便您可以使用:
@Html.DisplayDateNice(Model.TheDate)
Run Code Online (Sandbox Code Playgroud)
选项4: 视图模型上的额外属性,以格式化它并返回一个字符串,例如:
public string TheDateStr
{
get
{
return TheDate.DisplayItNicePlease();
}
}
Run Code Online (Sandbox Code Playgroud)
然后在视图中你就拥有了
@Model.TheDateStr
Run Code Online (Sandbox Code Playgroud)
与选项3非常相似,只是它保持视图真实,非常简单 - 视图只是输出模型中的内容而不关心数据的格式.
选项5: DisplayFormat属性,例如:在视图模型上:
[DisplayFormat(DataFormatString = "{0:'blah'dd/MM/yyyy}")]
public DateTime TheDate { get; set; }
Run Code Online (Sandbox Code Playgroud)
然后在视图上:
@Html.DisplayFor(m => m.TheDate)
Run Code Online (Sandbox Code Playgroud)
我喜欢这个,除了格式字符串不再使用,所以带上选项5 ......
选项6:
某种习惯,DisplayFormatAttribute例如NiceDateDisplayFormatAttribute.在我看来,这可能是最好的解决方案,如果您只想要一个简单的字符串格式化,那么效果很好.我认为如果你想要更复杂的东西会变得更复杂,例如显示相对时间(计算C#中的相对时间),在这种情况下,最好是在扩展方法/ html助手中.
可能还有其他方法我甚至都不知道......
将 YouTube IFrame Player API 与从www.youtube-nocookie.com域播放的隐私增强模式视频一起使用时,如何禁用在 youtube.com 上设置的 cookie ?
在https://support.google.com/youtube/answer/171780?hl=en的“开启隐私增强模式”部分,建议使用www.youtube-nocookie.com域:
在不使用跟踪观看行为的 cookie 的情况下嵌入 YouTube 视频。
这很有效,并且不会按预期设置 cookie。
但是,我们使用 IFrame Player API(带有enablejsapi=1嵌入参数),它确实设置了 cookie。我们看到在 .youtube.com 域上设置了以下 cookie:
这些从位于https://www.youtube.com/iframe_api的 Iframe Player API 脚本中设置为 HTTP cookie (打开 Chrome 隐身窗口并直接查看该脚本 URL 并检查 cookie,您将看到上述 2 个 cookie 集)。我不确定这些 cookie 到底是什么,但它们看起来很像跟踪 cookie。
因此,这些是在用户与视频交互或采取任何同意操作之前设置的事实,意味着我们无法使用 IFrame Player API,同时在欧盟 cookie 指令方面仍然符合 GDPR。
所以问题是,我们如何在不设置 cookie 的情况下使用 IFrame Player API?
注意:我已经用标签youtube-iframe-api发布了这篇文章,希望谷歌能回答这个问题:
我们支持 Stack Overflow …