Tag helper to add class if the model is invalid
up vote
1
down vote
favorite
I need to add a specific class to the input if the model is invalid
ValidationErrorClassTagHelper.cs
[HtmlTargetElement("input", Attributes = ValidationForAttributeName + "," + ValidationErrorClassName)]
public class ValidationErrorClassTagHelper : TagHelper
{
private const string ValidationForAttributeName = "validation-for";
private const string ValidationErrorClassName = "validationerror-class";
[HtmlAttributeName(ValidationForAttributeName)]
public ModelExpression For { get; set; }
[HtmlAttributeName(ValidationErrorClassName)]
public string ValidationErrorClass { get; set; }
[HtmlAttributeNotBound]
[ViewContext]
public ViewContext ViewContext { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
ViewContext.ViewData.ModelState.TryGetValue(For.Name, out ModelStateEntry entry);
if (entry != null && entry.Errors.Any())
{
output.AddClass(ValidationErrorClass, HtmlEncoder.Default);
}
}
}
AccountViewModels.cs
using System.ComponentModel.DataAnnotations;
namespace AccountViewModels
{
public class LoginViewModel
{
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
}
}
Login.cshtml
@model LoginViewModel
<form method="post" asp-action="Login">
<input asp-for="Email" validation-for="Email" validationerror-class="is-invalid"/>
<input asp-for="Password" validation-for="Password" validationerror-class="is-invalid"/>
<button type="submit" class="btn btn-primary">Login</button>
</form>
Generated html is the email is invalid for example
<input class="input-validation-error is-invalid" type="text" data-val="true" data-val-required="The Email field is required." id="Email" name="Email" value="">
- Is the good way to do this ?
- Is there a native way to do that using
Asp.Net Core 2?
c# asp.net-core
add a comment |
up vote
1
down vote
favorite
I need to add a specific class to the input if the model is invalid
ValidationErrorClassTagHelper.cs
[HtmlTargetElement("input", Attributes = ValidationForAttributeName + "," + ValidationErrorClassName)]
public class ValidationErrorClassTagHelper : TagHelper
{
private const string ValidationForAttributeName = "validation-for";
private const string ValidationErrorClassName = "validationerror-class";
[HtmlAttributeName(ValidationForAttributeName)]
public ModelExpression For { get; set; }
[HtmlAttributeName(ValidationErrorClassName)]
public string ValidationErrorClass { get; set; }
[HtmlAttributeNotBound]
[ViewContext]
public ViewContext ViewContext { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
ViewContext.ViewData.ModelState.TryGetValue(For.Name, out ModelStateEntry entry);
if (entry != null && entry.Errors.Any())
{
output.AddClass(ValidationErrorClass, HtmlEncoder.Default);
}
}
}
AccountViewModels.cs
using System.ComponentModel.DataAnnotations;
namespace AccountViewModels
{
public class LoginViewModel
{
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
}
}
Login.cshtml
@model LoginViewModel
<form method="post" asp-action="Login">
<input asp-for="Email" validation-for="Email" validationerror-class="is-invalid"/>
<input asp-for="Password" validation-for="Password" validationerror-class="is-invalid"/>
<button type="submit" class="btn btn-primary">Login</button>
</form>
Generated html is the email is invalid for example
<input class="input-validation-error is-invalid" type="text" data-val="true" data-val-required="The Email field is required." id="Email" name="Email" value="">
- Is the good way to do this ?
- Is there a native way to do that using
Asp.Net Core 2?
c# asp.net-core
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
I need to add a specific class to the input if the model is invalid
ValidationErrorClassTagHelper.cs
[HtmlTargetElement("input", Attributes = ValidationForAttributeName + "," + ValidationErrorClassName)]
public class ValidationErrorClassTagHelper : TagHelper
{
private const string ValidationForAttributeName = "validation-for";
private const string ValidationErrorClassName = "validationerror-class";
[HtmlAttributeName(ValidationForAttributeName)]
public ModelExpression For { get; set; }
[HtmlAttributeName(ValidationErrorClassName)]
public string ValidationErrorClass { get; set; }
[HtmlAttributeNotBound]
[ViewContext]
public ViewContext ViewContext { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
ViewContext.ViewData.ModelState.TryGetValue(For.Name, out ModelStateEntry entry);
if (entry != null && entry.Errors.Any())
{
output.AddClass(ValidationErrorClass, HtmlEncoder.Default);
}
}
}
AccountViewModels.cs
using System.ComponentModel.DataAnnotations;
namespace AccountViewModels
{
public class LoginViewModel
{
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
}
}
Login.cshtml
@model LoginViewModel
<form method="post" asp-action="Login">
<input asp-for="Email" validation-for="Email" validationerror-class="is-invalid"/>
<input asp-for="Password" validation-for="Password" validationerror-class="is-invalid"/>
<button type="submit" class="btn btn-primary">Login</button>
</form>
Generated html is the email is invalid for example
<input class="input-validation-error is-invalid" type="text" data-val="true" data-val-required="The Email field is required." id="Email" name="Email" value="">
- Is the good way to do this ?
- Is there a native way to do that using
Asp.Net Core 2?
c# asp.net-core
I need to add a specific class to the input if the model is invalid
ValidationErrorClassTagHelper.cs
[HtmlTargetElement("input", Attributes = ValidationForAttributeName + "," + ValidationErrorClassName)]
public class ValidationErrorClassTagHelper : TagHelper
{
private const string ValidationForAttributeName = "validation-for";
private const string ValidationErrorClassName = "validationerror-class";
[HtmlAttributeName(ValidationForAttributeName)]
public ModelExpression For { get; set; }
[HtmlAttributeName(ValidationErrorClassName)]
public string ValidationErrorClass { get; set; }
[HtmlAttributeNotBound]
[ViewContext]
public ViewContext ViewContext { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
ViewContext.ViewData.ModelState.TryGetValue(For.Name, out ModelStateEntry entry);
if (entry != null && entry.Errors.Any())
{
output.AddClass(ValidationErrorClass, HtmlEncoder.Default);
}
}
}
AccountViewModels.cs
using System.ComponentModel.DataAnnotations;
namespace AccountViewModels
{
public class LoginViewModel
{
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
}
}
Login.cshtml
@model LoginViewModel
<form method="post" asp-action="Login">
<input asp-for="Email" validation-for="Email" validationerror-class="is-invalid"/>
<input asp-for="Password" validation-for="Password" validationerror-class="is-invalid"/>
<button type="submit" class="btn btn-primary">Login</button>
</form>
Generated html is the email is invalid for example
<input class="input-validation-error is-invalid" type="text" data-val="true" data-val-required="The Email field is required." id="Email" name="Email" value="">
- Is the good way to do this ?
- Is there a native way to do that using
Asp.Net Core 2?
c# asp.net-core
c# asp.net-core
asked Apr 8 at 10:17
user149517
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
2
down vote
Have you considered adding style rules to class input-validation-error? It gets added to input element when its value is recognized as invalid.
See live example on .NET Fiddle.
However, if you really need to add your own custom class, take notice that your code only adds custom class to input elements on server side, so that specific class will stay on input elements forever (until next HTTP request). Earlier, I suggested making use of default input-validation-error class, because jQuery validation plugin takes care of removal that class when it discovers the input value as valid. Eventually, you would have to implement same client-side mechanism to remove/add your custom class probably by writing custom jQuery validation script.
Of course, none of above is a real problem if you simply do not care about dynamic client-side validation.
New contributor
Prolog is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
2
down vote
Have you considered adding style rules to class input-validation-error? It gets added to input element when its value is recognized as invalid.
See live example on .NET Fiddle.
However, if you really need to add your own custom class, take notice that your code only adds custom class to input elements on server side, so that specific class will stay on input elements forever (until next HTTP request). Earlier, I suggested making use of default input-validation-error class, because jQuery validation plugin takes care of removal that class when it discovers the input value as valid. Eventually, you would have to implement same client-side mechanism to remove/add your custom class probably by writing custom jQuery validation script.
Of course, none of above is a real problem if you simply do not care about dynamic client-side validation.
New contributor
Prolog is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |
up vote
2
down vote
Have you considered adding style rules to class input-validation-error? It gets added to input element when its value is recognized as invalid.
See live example on .NET Fiddle.
However, if you really need to add your own custom class, take notice that your code only adds custom class to input elements on server side, so that specific class will stay on input elements forever (until next HTTP request). Earlier, I suggested making use of default input-validation-error class, because jQuery validation plugin takes care of removal that class when it discovers the input value as valid. Eventually, you would have to implement same client-side mechanism to remove/add your custom class probably by writing custom jQuery validation script.
Of course, none of above is a real problem if you simply do not care about dynamic client-side validation.
New contributor
Prolog is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |
up vote
2
down vote
up vote
2
down vote
Have you considered adding style rules to class input-validation-error? It gets added to input element when its value is recognized as invalid.
See live example on .NET Fiddle.
However, if you really need to add your own custom class, take notice that your code only adds custom class to input elements on server side, so that specific class will stay on input elements forever (until next HTTP request). Earlier, I suggested making use of default input-validation-error class, because jQuery validation plugin takes care of removal that class when it discovers the input value as valid. Eventually, you would have to implement same client-side mechanism to remove/add your custom class probably by writing custom jQuery validation script.
Of course, none of above is a real problem if you simply do not care about dynamic client-side validation.
New contributor
Prolog is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
Have you considered adding style rules to class input-validation-error? It gets added to input element when its value is recognized as invalid.
See live example on .NET Fiddle.
However, if you really need to add your own custom class, take notice that your code only adds custom class to input elements on server side, so that specific class will stay on input elements forever (until next HTTP request). Earlier, I suggested making use of default input-validation-error class, because jQuery validation plugin takes care of removal that class when it discovers the input value as valid. Eventually, you would have to implement same client-side mechanism to remove/add your custom class probably by writing custom jQuery validation script.
Of course, none of above is a real problem if you simply do not care about dynamic client-side validation.
New contributor
Prolog is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Prolog is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
answered yesterday
Prolog
215
215
New contributor
Prolog is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Prolog is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
Prolog is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |
add a comment |
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f191527%2ftag-helper-to-add-class-if-the-model-is-invalid%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown