小编Err*_*sen的帖子

ASP.NET MVC为编辑和显示模式应用不同的DisplayFormat

问题

我正在浏览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格式日期:

在此输入图像描述

真正的问题

我真正的问题是:我可以在模型中设置正常显示和编辑模式的不同显示格式吗?

  • 我不想使用文本框来编辑日期 - 我想使用HTML5日期选择器; 它比使用文本框好得多.
  • 我也不是真的想要更改显示日期的所有视图,直接从模型中获取属性并使用自定义格式对其进行格式化,这有点否定了DisplayFormat属性的要点.(我想@Html.DisplayFor用于显示和 …

c# asp.net-mvc html5 date

10
推荐指数
1
解决办法
8882
查看次数

VIM有向图不工作

我似乎无法在GVIM中为我工作. 根据这个网站(以及VIM维基),我应该能够通过插入模式然后按Ctrl-Km*或Ctrl-Q956输入mu字符μ.

  • 当我尝试Ctrl-Km*我得到*
  • 当我尝试Ctrl-Q956时,我得到了ÿ

这让我很生气......当我的意思是μ时,我讨厌使用你.我通常使用Alt-0181,但这在VIM中也不起作用!

vim

5
推荐指数
2
解决办法
1698
查看次数

UrlPathEncode()替代

用于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没有产生所需的输出,那么什么方法等效并建议使用?

c# encoding escaping http

5
推荐指数
1
解决办法
797
查看次数

ASP.NET Core 2 - ReSharper"创建Razor视图"为Pages文件夹添加了新视图

我已经开始尝试使用新的ASP.NET Core 2来构建MVC Web App,到目前为止看起来很不错......

除了当我从我的控制器动作创建视图时,ReSharper在Pages文件夹中创建它们,而不是Views文件夹(我通常喜欢保留我的视图 ;-))

resharper创造剃刀视图 在页面文件夹中查看

对于常规ASP.NET Web应用程序(非核心),ReSharper不会这样做,它将视图放在正确的视图文件夹中,因此这看起来与Core/Core 2有关.

什么是resharper用于决定创建视图的位置?

如何更改此行为以便在传统位置创建视图?

c# asp.net resharper asp.net-core asp.net-core-2.0

5
推荐指数
1
解决办法
960
查看次数