我正在尝试构建一个验证器,它将使用.NET的DefaultModelBinder,使用DateTime.Parse将字符串从表单发布转换为DateTime.我不想等到日期已经发布到服务器,因为它意识到这是一个糟糕的约会.
目前,jquery.validate使用以下代码来验证日期字段:
// http://docs.jquery.com/Plugins/Validation/Methods/date
date: function(value, element) {
return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
}
Run Code Online (Sandbox Code Playgroud)
但是,由于Javascript糟糕的Date解析器,这个:
275481/69/100089
将评估为有效,至275760年9月12日.
而另一方面,这:
2013年11月19日
将评估为无效.
当然,我知道C#的DateTime.Parse()会考虑文化(本地化)和闰年等问题,我可以接受假设一种固定的(美国)文化,并允许"02-29-2013"在客户端上并在服务器上启动它(理想情况下不是,但它是可以接受的).
但我不敢相信有人没有把更好的日期验证器放在一起使用C#的DateTime.Parse()逻辑.
也许有人,我只是没有找到它 - 这就是我在这里张贴的原因.
而且我知道我有几种方法可以解决这个问题 - 从非常简单(不太准确)到极其复杂(更准确),但我希望有人已经走下这条路并找到了最佳点.
我有一个非常简单的问题,有一个我无法找到的解决方案.
鉴于以下模型:
public class InfoViewModel
{
public SelectList States { get; set; }
[DisplayName("State")]
public string State { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我认为以下工作正常:
@Html.DropDownListFor(m => m.State, Model.States)
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试将其拉入编辑器模板(名为"SelectList"),例如:
@model System.String
@Html.DropDownListFor(m => m, ViewData["selectList"])
Run Code Online (Sandbox Code Playgroud)
然后使用EditorFor
构建下拉列表:
@Html.EditorFor(m => m.State, "SelectList", new { selectList = Model.States })
Run Code Online (Sandbox Code Playgroud)
它失败并出现以下错误:
'System.Web.Mvc.HtmlHelper<string>' does not contain a definition for
'DropDownListFor' and the best extension method overload
'System.Web.Mvc.Html.SelectExtensions.DropDownListFor<TModel,TProperty>
(System.Web.Mvc.HtmlHelper<TModel>,
System.Linq.Expressions.Expression<System.Func<TModel,TProperty>>,
System.Collections.Generic.IEnumerable<System.Web.Mvc.SelectListItem>)'
has some invalid arguments
Run Code Online (Sandbox Code Playgroud)
我很难理解这两者之间的区别.我已尝试各种解决方法来排除故障,并获得相同的错误,或其他.
提前致谢.
asp.net-mvc editorfor html.dropdownlistfor razor asp.net-mvc-3
我需要在MVC3页面上有一个复选框(用于同意条款).
这是我的模型:
[Required]
[Display("I agree to the terms.")]
public bool Agreement { get; set; }
Run Code Online (Sandbox Code Playgroud)
这是我的观点:
@Html.CheckBoxFor(m => m.Agreement)
Run Code Online (Sandbox Code Playgroud)
但是,验证没有发生 - 它允许无论如何都提交表单.
我发现CheckBoxFor渲染了一个额外的隐藏字段,但我甚至尝试渲染我自己的复选框,但它仍然没有得到验证:
<input type="checkbox" name="Agreement" id="Agreement" value="true" data-val="true"
data-val-required="You must agree to the terms before proceeding." />
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
如果我将HtmlAttributes传递给模板,如下所示:
@Html.DisplayFor(m => m.FirstName, new { htmlAttributes = new { @class = "orangetxt strongtxt" } })
Run Code Online (Sandbox Code Playgroud)
在我的模板中,我如何将这些注入到我的HTML中:
<span @ViewData["htmlAttributes"]>@Model</span>
Run Code Online (Sandbox Code Playgroud)
这几乎可以工作,但它做了一些非常奇怪的事情,所以我假设这不是要走的路.
我意识到我可以通过HtmlHelper扩展方法实现这一点,以呈现完整的HTML元素(在本例中为span)并以这种方式传递属性,但是有没有办法直接将属性呈现为HTML元素,如上所述例?
我有一个运行Windows Server 2008 Web Edition(x64)的新IIS7盒子,我在那里建立了一个现有的经典ASP站点.该网站在大多数情况下运行良好且超级快速,但会随机挂起(大约20个左右的请求).通过挂起,我的意思是我将从浏览器中单击一个页面,并且浏览器(Mac上的Crome)从不响应 - 它只是不断加载,直到我在大约3分钟后得到以下错误:
Error 7 (net::ERR_TIMED_OUT): The operation timed out.
我很确定这是一个特定于Chrome的错误,所以我不是太挂了实际的错误,而是因为超时的原因.该站点连接到同一网络上的SQL 2005服务器,但我很确定这不是SQL超时,因为这将在30秒内发生,并给我一个关于SQL的特定错误.我认为这是我的网站或服务器的问题.
请注意,经常在看到这个之后,我可以简单地停止请求并重新加载页面,它将再次加载得很好,超级快速.
我甚至不确定从哪里开始排除故障.我必须弄明白这一点,否则这将意味着一个新的服务器购买.
在此先感谢您的任何建议.
我有一个模型属性,我正在尝试使用EditorFor模板进行渲染,我正在尝试使用DisplayFormat属性应用格式.然而,它根本不起作用 - 它完全被忽略了.
这是我的模板:
@model System.Decimal?
@Html.TextBoxFor(m => m)
Run Code Online (Sandbox Code Playgroud)
这是我的模型:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:0.00}")]
public decimal? Retail { get; set; }
Run Code Online (Sandbox Code Playgroud)
这是我的观点:
@Html.EditorFor(m => m.Retail)
Run Code Online (Sandbox Code Playgroud)
但它呈现的文本框具有以下值:
189.9900
它似乎非常直接,但它不起作用,我不知道为什么.
更新: 只是为了踢,我尝试使用DisplayFor模板,它工作:
@Html.DisplayFor(m => m.Retail)
Run Code Online (Sandbox Code Playgroud)
那么,当我设置ApplyFormatInEditMode
为true 时,为什么DisplayFor模板可以工作,而不是EditorFor模板呢?
更新2: 没关系,工作的原因是因为我的十进制显示模板被硬编码为格式化.所以我的显示模板也不起作用.
asp.net-mvc decimal mvc-editor-templates asp.net-mvc-3 displayformat
我让Elmah在我的MVC 3网站上运行,并且让所有东西都在我的本地开发机器上运行.
但是,现在我已将我的网站移动到我的生产服务器,Elmah无法正常工作.我在我的实时服务器上使用相同的SQL帐户(和连接字符串),就像我在本地计算机上使用的那样.EF4连接(与Elmah相同)工作得很好.
我在偶数日志或SQL事件探查器中看不到任何内容.我也没有在SQL日志中看到任何错误.
关于可能发生的事情的任何想法,或者我如何解决这个问题?
提前致谢.
我知道HTML5支持自定义data-*
属性,我知道VS2010 SP1应该包含HTML5支持.
但是,当我安装VS2010 SP1时,我仍然会在具有data-*
属性的元素上获得验证错误.
例如,这个:
<a id="Clicky" data-for="@Model.Id">Clicky</a>
Run Code Online (Sandbox Code Playgroud)
在VS2010中产生以下警告:
验证(XHTML 1.0 Transitional):属性'data-for'不是元素'a'的有效属性.
虽然我知道这些只是警告并且可以安全地被忽略,但我试图让我的网站尽可能符合标准,如果我的警告列表被这些警告垃圾邮件,我将无法看到有效的警告通过所有的噪音.
我做错了什么,或者我是否必须看到这些警告?
提前致谢.
假设我有以下实体:
public class User
{
public int Id { get; set; }
public string Username { get; set; }
public Guid UserGuid { get; set; }
public Guid ConfirmationGuid { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
以下接口方法:
void CreateUser(string username);
Run Code Online (Sandbox Code Playgroud)
部分实现应该创建两个新的GUID:一个用于UserGuid
,另一个用于ConfirmationGuid
.他们应该通过将值设置为来完成此操作Guid.NewGuid()
.
我已经使用接口抽象了Guid.NewGuid():
public interface IGuidService
{
Guid NewGuid();
}
Run Code Online (Sandbox Code Playgroud)
因此,当只需要一个新的GUID时,我可以轻松地模拟它.但是我不确定如何在一个方法中模拟对同一方法的两个不同的调用,以便它们返回不同的值.
我有一个数据库字段,其中包含存储为多行字符串的地址信息.
88 Park View
Hemmingdale
London
Run Code Online (Sandbox Code Playgroud)
谁能告诉我将第1行,第2行和第3行作为select语句中的不同字段的最佳方法?
关心理查德
asp.net-mvc ×6
razor ×4
c# ×2
iis-7 ×2
sql-server ×2
asp-classic ×1
decimal ×1
editorfor ×1
elmah ×1
html-helper ×1
html5 ×1
javascript ×1
jquery ×1
mocking ×1
moq ×1
sql ×1
t-sql ×1
tdd ×1
unit-testing ×1