У меня есть форма, которая публикует 13 объектов прямо сейчас. Некоторые из объектов могут быть необязательными, например, Referrer, другие не могут быть. Проблема заключается в том, что если я использую DAV и украшаю объекты атрибутами проверки, такими как [Required]
, даже если объект является необязательным, вся публикация потерпит неудачу, поскольку ModelState
будет недействительным.
Я могу удалить украшение [Required]
со всех объектов, но это не совсем правильно. Итак, есть ли способ выборочной проверки отдельных объектов при использовании DAV?
Учтите это:
<form>
<input type="hidden" name="Description.AuthorId" value="{?}" />
<p>
<label>Office</label>
<select name="Job.OfficeId">{?}</select>
</p>
<p>
<label>Description</label>
<textarea name="Description.Text"></textarea>
</p>
</form>
В этой значительно упрощенной форме , с которой я работаю Job
и Description
(Description
действительно относится к типу Note
, если говорить о БД). Job
информация должна быть заполнена, но описание не является обязательным. Проблема с формой заключается в том, что Description.AuthorId
всегда заполнен идентификатором текущего авторизованного пользователя.
public class Note {
[Required]
public short AuthorId { get; set; }
[Required, StringLength(XXX)]
public string Text { get; set; }
}
public RedirectToRouteResult Jobs(
[Bind(Prefix = "Job", Include = "OfficeId")] Job Job,
[Bind(Prefix = "Description", Include = "AuthorId,Text")] Note Description) {
if (ModelState.IsValid) {
if (Description != null) {
Description.Job = Job;
};
DataContext.Jobs.InsertOnSubmit(Job);
DataContext.SubmitChanges();
};
}
Первая проблема с методом заключается в том, что из-за формы Description
всегда будет генерироваться, потому что форма всегда будет проходить Description.AuthorId
, поэтому условная проверка, если Description
равно нулю, никогда не будет вызвана, даже если Description.Text
не был заполнен.
Вторая проблема связана с DAV, если Description.Text
не заполнен, тогда вся модель не пройдёт проверку, так как это обязательное поле для Note
. Таким образом, у меня даже не было бы возможности сделать что-нибудь еще.
Итак, я предполагаю, что мой вопрос заключается в том, как правильно реализовать проверку (DAV?) Для объекта, который может быть необязательным в форме пользовательского интерфейса, но сам по себе имеет обязательные поля из-за структуры базы данных?
Один из способов, о котором я думаю, - вместо передачи объектов в , метод состоит в том, чтобы создать их экземпляр в метода и затем выполнить TryUpdateModel
для каждого из них в порядке , проверить состояние модели и продолжить на основе условий. Это может занять много кода, поэтому я хочу посмотреть, есть ли более автоматическая версия, прежде чем я перейду к этому решению.
Помощь будет высоко ценится!