我正在浏览ASP.NET MVC 4的教程(但我认为这也适用于MVC 5),您可以在其中为电影商店创建一个网站.
电影模型具有DateTime类型的ReleaseDate属性.通常,这个日期将被视为比编辑日期更多,因此我应用以下属性来很好地渲染它.
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}")]
public DateTime ReleaseDate { get; set; }
Run Code Online (Sandbox Code Playgroud)
当显示此日期的视图呈现时使用:
@Html.DisplayFor(model => model.ReleaseDate)
Run Code Online (Sandbox Code Playgroud)
正如您所期望的那样,它显示格式正确:
但是,当编辑此日期的视图使用它时:
@Html.EditorFor(model => model.ReleaseDate)
Run Code Online (Sandbox Code Playgroud)
它显示一个可爱的HTML5日期选择器,但没有填写值,因为日期的格式错误(错误消息是The specified value '11/01/1989 00:00:00' does not conform to the required format, 'yyyy-MM-dd'.
这是一个问题,因为如果用户想要编辑一个条目,控件的日期永远不会被设置,因此用户将不知道先前/当前值是什么.
我通过阅读其他类似问题找到的解决方案是将模型中的DisplayFormat设置为yyyy-MM-dd,make适用于编辑控件:
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime ReleaseDate { get; set; }
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为它在编辑期间自动填充HTML5日期选择器的值(使用@Html.EditorFor())
:
但是当我正在显示时(使用`@ Html.DisplayFor()),我会遇到丑陋的ISO格式日期:
我真正的问题是:我可以在模型中设置正常显示和编辑模式的不同显示格式吗?
@Html.DisplayFor
用于显示和 …我似乎无法在GVIM中为我工作. 根据这个网站(以及VIM维基),我应该能够通过插入模式然后按Ctrl-Km*或Ctrl-Q956输入mu字符μ.
这让我很生气......当我的意思是μ时,我讨厌使用你.我通常使用Alt-0181,但这在VIM中也不起作用!
该用于UrlPathEncode MSDN页陈述了UrlPathEncode不应该被使用,并且,我应该使用以UrlEncode来代替。
不使用; 仅用于浏览器兼容性。使用UrlEncode。
但是,UrlEncode与UrlPathEncode的作用不同。
我的用例是我想对文件系统路径进行编码,以便可以下载文件。路径中的空格需要转义,但斜杠等不需要转义。UrlPathEncode正是这样做的。
// given the path
string path = "Directory/Path to escape.exe";
Console.WriteLine(System.Web.HttpUtility.UrlPathEncode(path));
// returns "Installer/My%20Installer.msi" <- This is what I require
Console.WriteLine(System.Web.HttpUtility.UrlEncode(path));
// returns "Installer%2fMy+Installer.msi"
// none of these return what I require, either
Console.WriteLine(System.Web.HttpUtility.UrlEncode(path, Encoding.ASCII));
Console.WriteLine(System.Web.HttpUtility.UrlEncode(path, Encoding.BigEndianUnicode));
Console.WriteLine(System.Web.HttpUtility.UrlEncode(path, Encoding.Default));
Console.WriteLine(System.Web.HttpUtility.UrlEncode(path, Encoding.UTF32));
Console.WriteLine(System.Web.HttpUtility.UrlEncode(path, Encoding.UTF7));
Console.WriteLine(System.Web.HttpUtility.UrlEncode(path, Encoding.UTF8));
Console.WriteLine(System.Web.HttpUtility.UrlEncode(path, Encoding.Unicode));
Run Code Online (Sandbox Code Playgroud)
我尝试过的另一种方法是使用Uri.EscapeDataString,但这会转义斜线。
// returns Directory%2FPath%20to%20escape.exe
Console.WriteLine(Uri.EscapeDataString(path));
Run Code Online (Sandbox Code Playgroud)
如果我不应该使用UrlPathEncode,并且UrlEncode没有产生所需的输出,那么什么方法等效并建议使用?
我已经开始尝试使用新的ASP.NET Core 2来构建MVC Web App,到目前为止看起来很不错......
除了当我从我的控制器动作创建视图时,ReSharper在Pages文件夹中创建它们,而不是Views文件夹(我通常喜欢保留我的视图 ;-))
对于常规ASP.NET Web应用程序(非核心),ReSharper不会这样做,它将视图放在正确的视图文件夹中,因此这看起来与Core/Core 2有关.
什么是resharper用于决定创建视图的位置?
如何更改此行为以便在传统位置创建视图?