我有有一些必填字段,其中一些沒有任何驗證的模型。但是,儘管填充了所有這些文本框,但我的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我已經在代碼中修復了它。 –