ฉันมีโมเดลที่ค่อนข้างซับซ้อนซึ่งฉันใช้เพื่อแสดงแบบฟอร์มและดำเนินการตรวจสอบความถูกต้องโดยใช้ข้อมูลเมตาข้อมูลเมตาของโมเดล
View Model มีรายการวัตถุลูกที่รวมอยู่ในแบบฟอร์ม วัตถุลูกจะขึ้นอยู่กับสิ่งนี้:
[Table]
public class FieldInstance
{
[Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
public long fiID { get; set; }
[Column]
public string fiLabel { get; set; }
[Column]
public bool fiIsRequired { get; set; }
[DisplayName("alpha-numeric value")]
[Column]
public string fiStrValue { get; set; }
[DisplayName("date/time value")]
[Column]
public DateTime? fiDateTimeValue { get; set; }
[DisplayName("integer value")]
[Column]
public long? fiIntValue { get; set; }
[DisplayName("decimal value")]
[Column]
public decimal? fiDecValue { get; set; }
[Column]
public int fiOrder { get; set; }
[Column]
public long fiStreamEntryID { get; set; } // FK
[Column]
public long fiFieldTypeID { get; set; } // FK
// Relationship (many FieldInstances to one StreamEntry)
// using EntityRef<StreamEntry> and ThisKey
// which is "This" table's FK
private EntityRef<StreamEntry> _StreamEntry;
[System.Data.Linq.Mapping.Association(Storage = "_StreamEntry", ThisKey = "fiStreamEntryID")]
public StreamEntry StreamEntry
{
get { return this._StreamEntry.Entity; }
set { this._StreamEntry.Entity = value; }
}
// Relationship (one FieldInstance to one FieldType)
// using EntityRef<FieldTypes> and ThisKey
private EntityRef<FieldTypes> _FieldType;
[System.Data.Linq.Mapping.Association(Storage = "_FieldType", ThisKey = "fiFieldTypeID")]
public FieldTypes FieldTypes
{
get { return this._FieldType.Entity; }
set { this._FieldType.Entity = value; }
}
ฉันใช้คำสั่ง Html.EditorFor()
เพื่อแสดงเทมเพลตมุมมองบางส่วนสำหรับแต่ละรายการในรายการ
หากฉันใส่ข้อความลงในฟิลด์ Datetime
ดังนั้น Html.ValidationSummary()
จะแสดง:
•The value 'asd' is not valid for date/time value.
•The value 'asd' is not valid for date/time value.
ปัญหาของฉันคือมีการเพิ่มข้อผิดพลาดใน ModelState
สองครั้งแทนที่จะเป็นเพียงครั้งเดียว นี่คือการกระทำของคอนโทรลเลอร์:
[HttpPost]
public ActionResult EntryEdit(StreamEntry form)
{
// Get values
StreamEntry entry =
form.seID == 0
? new StreamEntry()
: genesisRepository.GetEntryByID(form.seID);
// Get Stream for new entry
if (form.seID == 0)
entry.Stream = genesisRepository.GetStreamByID(form.StreamID);
//Validate
TryUpdateModel(entry);
if (ModelState.IsValid)
return RedirectToAction("EntryList", new { id = entry.StreamID });
else
return View(entry);
}
เหตุใดข้อผิดพลาดที่เกิดจากการมีอยู่ของอินพุตที่ไม่ถูกต้องจึงส่งผลให้มีการเพิ่มข้อผิดพลาดสองครั้งใน `ModelState