我有有一些必填字段,其中一些没有任何验证的模型。但是,尽管填充了所有这些文本框,但我的ModelState.IsValid仍然给我一个错误。我正在使用实体框架。我错过了什么?数据注解工作错误
型号
public class EDModel
{
public Guid Id { get; set; }
[Required]
[Display(Name = "Number of beds")]
public int Beds { get; set; }
[Required]
[Display(Name = "Number of Hospital Beds")]
public int HospitalBeds { get; set; }
public string Notes { get; set; }
}
查看
<div class="divPanel">
@Html.HiddenFor(m => m.Id)
@Html.ValidationMessageFor(m => m.Id)
<div class="row">
<div class="col-md-3">
@Html.LabelFor(m => m.Beds)
@Html.TextBoxFor(m => m.Beds, new { @class = "form-control", @type = "number", title = "Total number of beds available " })
@Html.ValidationMessageFor(m => m.Beds)
</div>
<div class="col-md-3">
@Html.LabelFor(m => m.HospitalBeds)
@Html.TextBoxFor(m => m.HospitalBeds , new { @class = "form-control", @type = "number", title = "Total number of hospital beds" })
@Html.ValidationMessageFor(m => m.HospitalBeds)
</div>
<div class="col-md-8">
@Html.LabelFor(m => m.Notes)
@Html.TextAreaFor(m => m.Notes, new { @class = "form-control", title = "" })
</div>
</div>
</div>
控制器
public ActionResult Update(EDModel model)
{
if(model.Id==null || model.Id == default(Guid))
{
model.Id = Guid.NewGuid();
}
if (ModelState.IsValid)
{
}
foreach (ModelState modelState in ViewData.ModelState.Values)
{
foreach (ModelError error in modelState.Errors)
{
var errors = ModelState.Keys.Where(k => ModelState[k].Errors.Count > 0).Select(k => new { propertyName = k, errorMessage = ModelState[k].Errors[0].ErrorMessage });
}
}
}
我尝试设置方法内部的ID想这可能是问题,因为它是在一个主键DB,但仍存在Model.IsValid错误。
EDIT 1:我已添加的ModelState错误,但该错误消息表示“需要的值。”但不是问题在哪个字段中。
编辑2:我添加了对ID的验证,这是问题所在。尽管我把它设置在控制器中,但是没有ID会引发错误。我添加了代码建议,它仍然显示id字段为错误。
我意识到模型状态错误是在提交和没有点在控制器设置它仍然会是一个错误。那么如何管理Id字段可能有值或可能为空的情况。
那么,有什么错误? – stuartd
您显示的模型名为'EDModel',但您的视图中的模型是'EDSaturationModel' - 它们不是相同的 –
@StephenMuecke我已经在代码中修复了它。 –