【发布时间】:2014-09-15 13:35:59
【问题描述】:
我的 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; }
}
在这种情况下,重要的属性是 Patient VmPatient。这是由Database Model First 生成的模型。他有验证。代码如下。
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; }
}
我有 Main Index ,其中返回我的 ViewModel 因为,在同一个视图中显示两个模型。代码如下
public ActionResult Index(int id)
{
ViewModel _viewModle = new ViewModel();
schedule = new Schedule();
if(Request.HttpMethod == "Post")
{
return View(_viewModle);
}
else
{
idDr = id;
_viewModle.schedule = schedule;
_viewModle.BlockBtn = _repository.BlockBtn(schedule);
_viewModle.VmDoctor = db.Doctors.Find(idDr);
_viewModle.hours = _repository.GetHours();
foreach (var item in _viewModle.hours)
{
_viewModle.hours2 = _repository.GetButtonsActiv(item.hourBtn, item.count, idDr, schedule);
}
}
if (_viewModle == null)
{
return HttpNotFound();
}
return View(_viewModle);
}
在视图索引中,我显示了我的对象并渲染了部分 _FormPatient。代码如下。
@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>
最后一步是由下面的@Html.partial.code 在主索引中呈现的表单
@model Dentist.Models.ViewModel
@using (Html.BeginForm("Create","Patient"))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<font color="red">@ViewBag.Pesel</font>
<div class="form-horizontal">
<div class="form-group">
@Html.LabelFor(model => model.VmPatient.email, htmlAttributes: new { @class = "control-label col-md-2" }, labelText: "E-mail:")
<div class="col-md-10">
@Html.TextBoxFor(model => model.VmPatient.email, new { htmlAttributes = new { @class = "form-control" } })
@*<input class="form-control" id="email" name="email" type="text" value="">*@
@Html.ValidationMessageFor(model => model.VmPatient.email, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.VmPatient.phone, htmlAttributes: new { @class = "control-label col-md-2" }, labelText: "Telefon kom.:")
<div class="col-md-10">
@Html.TextBoxFor(model => model.VmPatient.phone, new { maxlength = 9 })
@*<input class="form-control" maxlength="9" id="phone" name="phone" type="text" value="" />*@
@Html.ValidationMessageFor(model => model.VmPatient.phone, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
请注意此表单重定向到另一个控制器,数据将在此处验证并保存到数据库。将验证并保存来自 FORM 的数据的方法。代码如下
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Patient pat)
{
ViewModel vm = new ViewModel();
DentistEntities db = new DentistEntities();
if (ModelState.IsValid)
{
db.Patients.Add(pat);
db.SaveChanges();
}
return RedirectToAction("Index", "Visit", new { id = VisitController.idDr });
}
结论 我怎样才能得到这个表格的验证!我观察到,每次 modelstate.isvalid 返回 false .. 我没有任何想法,所以我想请你帮忙。 最好的问候。
【问题讨论】:
-
查看您的代码我怀疑
pat的值在您的 POST 方法中为空
标签: c# asp.net-mvc