我有一个这样的对象:
public class Test
{
public String TestValue { get; set; }
}
对于此对象,有一个模板的自定义编辑器:
@inherits System.Web.Mvc.WebViewPage<MvcApplication12.Models.TestModel>
@Html.EditorFor(m => m.TestValue)
和Model-Binder:
public class TestBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ValueProviderResult providerValue =
bindingContext.ValueProvider.GetValue(bindingContext.ModelName + ".TestValue");
bindingContext.ModelState.SetModelValue(bindingContext.ModelName + ".TestValue", providerValue);
if (null != providerValue && !String.IsNullOrWhiteSpace(providerValue.AttemptedValue))
{
Test test = new Test();
test.TestValue = providerValue.AttemptedValue;
return test;
}
return null;
}
}
控制器的模型是这样的:
public class LogOnModel
{
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[Required]
[Display(Name = "Value")]
public Test Value { get; set; }
}
你可以看到,我使用Test对象,它将由上面显示的模板的自定义编辑器呈现。
剃刀语法是这样的:
<div class="editor-label">
@Html.LabelFor(m => m.Password)
</div>
<div class="editor-field">
@Html.PasswordFor(m => m.Password)
@Html.ValidationMessageFor(m => m.Password)
</div>
<div class="editor-label">
@Html.LabelFor(m => m.Value)
</div>
<div class="editor-field">
@Html.EditorFor(m => m.Value)
@Html.ValidationMessageFor(m => m.Value)
</div>
模型中的数据转换表明,测试对象的输入(m.Value)是必需的。当此字段没有输入时,ModelBinder(TestBinder)将返回null。
然后验证消息显示如下:
但是名为“input-validation-error”的css类没有添加到输入字段中。
如何实现,在模型错误mvc3上将css类“input-validation-error”添加到自定义编辑器模板的所有嵌套输入字段中?
答案 0 :(得分:1)
最后我解决了它。 有两种方法可以做到。
@inherits System.Web.Mvc.WebViewPage<MvcApplication12.Models.TestModel>
@Html.TextBox("", Model.TestValue)
首先,您必须更改您的css文件并添加一行,如下所示
.inner-input-validation-error input[type=text]
现在,您可以说出错误字段的外观。也许是这样的
.inner-input-validation-error input[type=text],
input.input-validation-error,
textarea.input-validation-error,
select.input-validation-error
{
border: 1px solid black;
background-color: red;
font-size:100%;
}
现在更改模板的自定义编辑器,以便在包含编辑字段的范围内添加错误类.inner-input-validation-error
@inherits System.Web.Mvc.WebViewPage<MvcApplication12.Models.TestModel>
<span
@if (!ViewData.ModelState.IsValid)
{
<text>
class="inner-input-validation-error"
</text>
}
>
@Html.EditorFor(model => model.TestValue1)
@Html.EditorFor(model => model.TestValue2)
</span>
多数民众赞成。