C# ViewModel中的验证无效

C# ViewModel中的验证无效,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个ViewModel,它包含类的一些属性。代码如下 public class ViewModel { public Doctor VmDoctor { get; set; } public Patient VmPatient { get; set; } public List<Visit> VmVisit { get; set; } public List<Hours> hours { get; set; } pu

我有一个ViewModel,它包含类的一些属性。代码如下

 public class ViewModel
{
    public Doctor VmDoctor { get; set; }     
    public Patient VmPatient { get; set; }
    public List<Visit> VmVisit { get; set; }
    public List<Hours> hours { get; set; }
    public List<Hours> hours2 { get; set; }
    public Schedule schedule { get; set; }

    public bool BlockBtn { get; set; }
    public Test test { get; set; }


}
 public partial class Patient
{
    public Patient()
    {
        this.Visits = new HashSet<Visit>();
    }

    public int PatientID { get; set; }
    [Required(ErrorMessage = "Podaj imię.")]
    public string name { get; set; }
    [Required(ErrorMessage = "Podaj nazwisko.")]
    public string surname { get; set; }
    [Required(ErrorMessage = "Podaj pesel.")]
    [RegularExpression(@"^\(?([0-9]{11})$", ErrorMessage = "Nieprawidłowy numer pesel.")]
    public string pesel { get; set; }
    [Required(ErrorMessage = "Podaj miasto.")]
    public string city { get; set; }
    [Required(ErrorMessage = "Podaj kod pocztowy.")]
    public string zipCode { get; set; }
    [Required(ErrorMessage = "Podaj e-mail.")]
    [EmailAddress(ErrorMessage = "Nieprawidłowy adres e-mail")]
    public string email { get; set; }
    [Required(ErrorMessage = "Podaj telefon komórkowy.")]
    [RegularExpression(@"^\(?([0-9]{9})$", ErrorMessage = "Nieprawidłowy numer telefonu.")]
    public string phone { get; set; }

    public virtual ICollection<Visit> Visits { get; set; }
}
@model Dentist.Models.ViewModel

<div class="container-select-doctor">
    <div class="row">
        <div class="text-left">
            <div class="row">
                <div class="content">
                            <div class="profileImage">
                                <div class="imageContener"><img style="margin:1px;" src="@Url.Content("~/Images/" + System.IO.Path.GetFileName(@Model.VmDoctor.image))" /></div>
                            </div>
                                <div class="profileInfo">
                                    <div class="profileInfoName">@Model.VmDoctor.name @Model.VmDoctor.surname</div>
                                    <div class="profileInfoSpeciality">@Model.VmDoctor.specialty</div>
                               </div>
                </div>
           </div>
      </div>
        @ViewBag.firstDay<br />
        @ViewBag.lastDay<br />
        <div class="text-middle">


            <div class="content">

                <div id="partialZone">
                      @Html.Partial("_TableSchedule")   
                </div>
            </div>
        </div>
        <div class="text-right">
            <div class="content">
                     @Html.Partial("_FormPatient")                    
            </div>
         </div>
    </div>
</div>
内部视图索引我显示我的对象和渲染的部分患者。代码如下

 public class ViewModel
{
    public Doctor VmDoctor { get; set; }     
    public Patient VmPatient { get; set; }
    public List<Visit> VmVisit { get; set; }
    public List<Hours> hours { get; set; }
    public List<Hours> hours2 { get; set; }
    public Schedule schedule { get; set; }

    public bool BlockBtn { get; set; }
    public Test test { get; set; }


}
 public partial class Patient
{
    public Patient()
    {
        this.Visits = new HashSet<Visit>();
    }

    public int PatientID { get; set; }
    [Required(ErrorMessage = "Podaj imię.")]
    public string name { get; set; }
    [Required(ErrorMessage = "Podaj nazwisko.")]
    public string surname { get; set; }
    [Required(ErrorMessage = "Podaj pesel.")]
    [RegularExpression(@"^\(?([0-9]{11})$", ErrorMessage = "Nieprawidłowy numer pesel.")]
    public string pesel { get; set; }
    [Required(ErrorMessage = "Podaj miasto.")]
    public string city { get; set; }
    [Required(ErrorMessage = "Podaj kod pocztowy.")]
    public string zipCode { get; set; }
    [Required(ErrorMessage = "Podaj e-mail.")]
    [EmailAddress(ErrorMessage = "Nieprawidłowy adres e-mail")]
    public string email { get; set; }
    [Required(ErrorMessage = "Podaj telefon komórkowy.")]
    [RegularExpression(@"^\(?([0-9]{9})$", ErrorMessage = "Nieprawidłowy numer telefonu.")]
    public string phone { get; set; }

    public virtual ICollection<Visit> Visits { get; set; }
}
@model Dentist.Models.ViewModel

<div class="container-select-doctor">
    <div class="row">
        <div class="text-left">
            <div class="row">
                <div class="content">
                            <div class="profileImage">
                                <div class="imageContener"><img style="margin:1px;" src="@Url.Content("~/Images/" + System.IO.Path.GetFileName(@Model.VmDoctor.image))" /></div>
                            </div>
                                <div class="profileInfo">
                                    <div class="profileInfoName">@Model.VmDoctor.name @Model.VmDoctor.surname</div>
                                    <div class="profileInfoSpeciality">@Model.VmDoctor.specialty</div>
                               </div>
                </div>
           </div>
      </div>
        @ViewBag.firstDay<br />
        @ViewBag.lastDay<br />
        <div class="text-middle">


            <div class="content">

                <div id="partialZone">
                      @Html.Partial("_TableSchedule")   
                </div>
            </div>
        </div>
        <div class="text-right">
            <div class="content">
                     @Html.Partial("_FormPatient")                    
            </div>
         </div>
    </div>
</div>
结论:我如何才能获得此表单的验证!我观察到,每次modelstate.isvalid返回false。。我没有任何想法,所以我想请你帮忙。
致以最诚挚的问候。

我建议您这样做:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Patient pat)
{
    ViewModel vm = new ViewModel();
    DentistEntities db = new DentistEntities();


    if (ModelState.IsValid)
    {

        db.Patients.Add(pat);
        db.SaveChanges();
    }

    vm.VmPatient = pat;
    return View(vm);    
}
再次呈现视图,但这次验证错误消息应该显示在页面上(通过视图中的ValidationMessageFor()调用)。这样,至少您可以看到验证失败的原因

或者,您可以询问modelstate,例如

foreach (ModelState modelState in ViewData.ModelState.Values) {
    foreach (ModelError error in modelState.Errors) {
        string error = error.ErrorMessage;
    }
}

查看您的代码,我怀疑您的帖子中的
pat
值为空谢谢!你的想法帮助了我!我刚刚使用了Ajax.beginForm,所有的验证都有效!!!顺致敬意,