c# - Html.TextBoxFor/Html.TextAreaFor 和 Html.EditorFor 之间的客户端验证差异(使用 [DataType(DataType.MultilineText)])

标签 c# asp.net-mvc-3 razor client-side-validation unobtrusive-validation

我在 ASP.NET MVC 3/Razor 中使用客户端验证(不显眼),我让它在 <textarea> 上工作通过使用 Html.EditorFor 并指定 DataType.MultilineText,但 Html.TextAreaFor 不应该也有客户端验证吗?

[Required(ErrorMessage = "Foo")]
public string Message { get; set; }

// Does add client-side validation
@Html.TextBoxFor(m => m.Message)

// Does NOT add client-side validation
@Html.TextAreaFor(m => m.Message)

[Required(ErrorMessage = "Foo")]
[DataType(DataType.MultilineText)]
public string Message { get; set; }

// Does add client-side validation (and multiline)
@Html.EditorFor(m => m.Message)

// Does NOT add client-side validation
@Html.TextAreaFor(m => m.Message)

<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

最佳答案

您上面的示例对我来说效果很好。我想知道 - 这是一个精确的例子,还是从现实世界的问题中简化而来的?在使用具有嵌套属性的模型时,我发现了这种确切的行为。

因此,例如,如果我将您的模型更改为如下所示:

public class MyModelObject
{
    [Required(ErrorMessage = "Foo")]
    [DataType(DataType.MultilineText)]
    public string Message { get; set; }
}

public class MyModel
{
    public MyModelObject MyObject { get; set; }
}

然后我重现你提到的确切问题。

@Html.EditorFor(x => x.MyObject.Message)

按预期生成 jquery 验证属性:

<textarea class="text-box multi-line input-validation-error" data-val="true" data-val-required="Foo" id="MyObject_Message" name="MyObject.Message"></textarea>

但是,这个:

@Html.TextAreaFor(x => x.MyObject.Message)

不会:

<textarea cols="20" id="MyObject_Message" name="MyObject.Message" rows="2"></textarea>

如果这确实描述了您的问题,那么看起来这已被报告为错误: http://aspnet.codeplex.com/workitem/8576

关于c# - Html.TextBoxFor/Html.TextAreaFor 和 Html.EditorFor 之间的客户端验证差异(使用 [DataType(DataType.MultilineText)]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6426489/

相关文章:

c# - 如果 DirectoryInfo 包含目录

c# - 将缩进文本转换为 XML

javascript - 显式定义 Controller 参数时,默认模型绑定(bind)程序会崩溃

asp.net-mvc - MVC : route config order routes

.net - 如何在 ASP.NET MVC 3 中正确实现 "Confirm Password"?

c# - 如何仅从 Razor 页面中的 DateTime 值获取日期?

c# - Web API AuthorizeAttribute 不返回自定义响应

c# - 始终将服务作为 NetworkService 运行,即使在交互模式下也是如此

javascript - 从 javascript 函数调用 razor c# 函数

javascript - MVC 3 Razor 如何使复杂的 javascript 有条件?