我在 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/