简体   繁体   中英

Model Validation With MVC Razor

I'm implementing MVC based website using the Razor engine.

I have created the validation to be in the model. ie Student validation is like this:

[MetadataType(typeof(Student.StudentMetaData))]
public partial class Student
{
       internal sealed class StudentMetaData
       {
              [Required(ErrorMessageResourceName = "FirstNameRequired", ErrorMessageResourceType = typeof(StudentMessages))]
              public object FirstName { set; get; }

              [Required(ErrorMessageResourceName = "FatherNameRequired", ErrorMessageResourceType = typeof(StudentMessages))]
              public object FatherName { set; get; }
       }
}

The student already implements the IDataErrorInfo interface. The data fields exist in the other partial class (the partial class created by T4 file).

The problem is when I use it with client validation in Razor view using:

@Html.TextBoxFor(m => m.FatherName, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.FatherName)

it doesn't get the messages I specified in my resource files.

I have tried the same technique before with WPF and it works just fine.

I allowed the client validation in the Web.config and used this in my view:

@{
    HtmlHelper.ClientValidationEnabled = true;
}
Add Name space in modal class in mvc.
using System.ComponentModel.DataAnnotations;

 public class TelePhones
    {      
        [Required (ErrorMessage  = "MobileNo is required")]
        public long MobileNo { get; set; }

        [DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")]
        [DataType(DataType.Date)]
        public string DateOfBirth { get; set; }

        [Range(15, 70, ErrorMessage = "Price must be between 15 and 70")]
        public int Age { get; set; }
}
client side validation in mvc

 <div class="editor-label">
            @Html.LabelFor(model => model.MobileNo)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.MobileNo)
            @Html.ValidationMessageFor(model => model.MobileNo)
        </div> 
        <div class="editor-label">
            @Html.LabelFor(model => model.DateOfBirth)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.DateOfBirth)
            @Html.ValidationMessageFor(model => model.DateOfBirth)       
       </div> 
        <div class="editor-label">
            @Html.LabelFor(model => model.Age)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Age)
            @Html.ValidationMessageFor(model => model.Age)
        </div>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM