当我们使用mvc模型验证引擎时,它会自动将Site.css中的某些css类添加到由HTML帮助程序方法生成的编辑器中;即某些对象中的一个:
.field-validation-error
{
color: #ff0000;
}
.field-validation-valid
{
display: none;
}
.input-validation-error
{
border: 1px solid #ff0000;
background-color: #ffeeee;
}
.validation-summary-errors
{
font-weight: bold;
color: #ff0000;
}
.validation-summary-valid
{
display: none;
}
我们可以编辑这些样式以应用所需的样式。
但是有没有机会告诉模型验证引擎,根据用户的要求使用什么样的确切样式,以便我们可以有一个不同字段的页面,样式不同?
修改
假设我们有以下观点:
@model ModelValidation.Models.Appointment
@{
ViewBag.Title = "Make a Booking";
}
<h2>
Book an Appointment</h2>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<p>
@Html.LabelFor(m => m.ClientName, "Your name: ") @Html.EditorFor(m => m.ClientName)
@Html.ValidationMessageFor(m => m.ClientName)
</p>
<p>
@Html.LabelFor(m => m.Date, "Appointment Date: ") @Html.EditorFor(m => m.Date)
@Html.ValidationMessageFor(m => m.Date)
</p>
<p>
@Html.EditorFor(m => m.TermsAccepted) @Html.LabelFor(m => m.TermsAccepted, "I accept the terms & conditions")
@Html.ValidationMessageFor(m => m.TermsAccepted, null, new { @class = "other-input-validation-error" })
</p>
<input type="submit" value="Make Booking" />
}
如果@Html.ValidationMessageFor
重载,我们可以指定css类来设置错误消息的样式。但是我们如何为编辑器指定css类?
答案 0 :(得分:1)
我确实在急躁地等待其他答案,但直到这就是我想出来的。
对于Html.TextBoxFor
或Html.PasswordFor
等具体帮助方法,存在必要的重载。以下示例显示了我想要的内容:
@using (Html.BeginForm())
{
<p>
@{ModelState state = ViewData.ModelState["ClientName"];
}
@Html.LabelFor(m => m.ClientName, "Your name: ")
@if (state != null && state.Errors.Count > 0)
{
@Html.TextBoxFor(m => m.ClientName, new { @class = "other-input-validation-error" })
}
else
{
@Html.EditorFor(m => m.ClientName)
}
@Html.ValidationMessageFor(m => m.ClientName)
</p>
}
但我仍然愿意接受任何其他想法如何做到这一点。我对asp很新,可能很容易丢失(根本就不知道)这项技术的一些不错的功能。
修改强>
正如 Sanderson S. Freeman A. - Pro ASP.NET MVC 3 Framework第三版
中所述我们不能使用模板化助手为a生成编辑器 属性,如果我们也想提供额外的属性,所以我们有 使用了Html.TextBoxFor帮助程序,并使用了该版本 接受用于HTML属性的匿名类型。
答案 1 :(得分:0)
您始终可以使用该特定页面中包含的另一个css文件来覆盖您的设置。 要覆盖MVC生成的CSS的设置,您可以使用像这样的容器ID
#container .mvc_css_class
{
display: none;
}
另一种选择是使用元素名称来增加自己的css的优先级,但是通过指定不同的ID不起作用
div.mvc_css_class
{
display: none;
}
因此,如果您想以不同方式设置单个页面的样式,只需包含您的css文件并将容器ID设置为该页面的其他值,新的css设置将根据容器覆盖。
编辑: 要选择在每个页面上覆盖样式,必须在每个页面上使用单独的设置。首先以不同方式命名表单容器ID
<div id="container-homepage">
...... the form data with original settings ..
</div>
在您的css文件中,使用id为主页
应用所需的样式#container-homepage .mv_generated_class{
color : blue;
}
对你想要看起来不同的所有页面和类重复相同的