Solución:
Puede agregar un asterisco a un campo obligatorio únicamente a través de CSS.
Primero, cree una clase CSS para ello:
.required::after
{
content: "*";
font-weight: bold;
color: red;
}
Esto agregará un asterisco rojo a cualquier elemento con la clase “requerida”.
Luego, en su opinión, simplemente agregue la nueva clase a su etiqueta:
@Html.LabelFor(m => m.Name, new { @class="required" })
Incluso mejor podría ser un HTML Helper personalizado que discierna si el campo tiene un [Required] atributo, y si es así, agrega el required
Clase CSS.
Aquí hay una publicación de blog que describe cómo hacer esto.
Para darle un pequeño ejemplo modificado del sitio anterior (nota: no lo he compilado / probado):
namespace HelpRequest.Controllers.Helpers
{
public static class LabelExtensions
{
public static MvcHtmlString Label(this HtmlHelper html, string expression, string id = "", bool generatedId = false)
{
return LabelHelper(html, ModelMetadata.FromStringExpression(expression, html.ViewData), expression, id, generatedId);
}
[SuppressMessage("Microsoft.Design", "CA1006:DoNotNestGenericTypesInMemberSignatures", Justification = "This is an appropriate nesting of generic types")]
public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string id = "", bool generatedId = false)
{
return LabelHelper(html, ModelMetadata.FromLambdaExpression(expression, html.ViewData), ExpressionHelper.GetExpressionText(expression), id, generatedId);
}
internal static MvcHtmlString LabelHelper(HtmlHelper html, ModelMetadata metadata, string htmlFieldName, string id, bool generatedId)
{
string labelText = metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last();
if (String.IsNullOrEmpty(labelText))
{
return MvcHtmlString.Empty;
}
var sb = new StringBuilder();
sb.Append(labelText);
if (metadata.IsRequired)
sb.Append("*");
var tag = new TagBuilder("label");
if (!string.IsNullOrWhiteSpace(id))
{
tag.Attributes.Add("id", id);
}
else if (generatedId)
{
tag.Attributes.Add("id", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName) + "_Label");
}
tag.Attributes.Add("for", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName));
tag.SetInnerText(sb.ToString());
return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal));
}
}
}
Lo hice de esa manera porque mis campos obligatorios deben ser dinámicos (definidos en un archivo de configuración)
Agregue al final de su Vista:
<script type="text/javascript">
$('input[type=text]').each(function () {
var req = $(this).attr('data-val-required');
if (undefined != req) {
var label = $('label[for="' + $(this).attr('id') + '"]');
var text = label.text();
if (text.length > 0) {
label.append('<span> *</span>');
}
}
});
</script>
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)