Прежде всего, извините за мой английский. Не мой естественный язык.ASP.NET MVC 4: Пропустить проверку в дочернем объекте
У меня есть класс с именем Category
, как показано ниже. Обратите внимание, что в этом коде у меня также есть свойство Category
, в котором я могу ссылаться на категорию «Отец». Это класс, объявленный внутри класса. Как начало. Итак, этот объект категории «Отец» обладает теми же свойствами «класса, который его объявил».
Требуется имущество Name
. Помните это свойство.
public class Category
{
public int? Id{ get; set; }
[DisplayName("Father Category")] //NOT REQUIRED
public Category Father { get; set; }
[DisplayName("Category")]
[Required(ErrorMessage = "Name is required")] //REMEMBER THIS REQUIRED PROPERTY!!
public string Name { get; set; }
[DisplayName("Status")]
public bool Status { get; set; }
[DisplayName("Description")]
public string Description { get; set; }
}
Это мой класс.
Так, в категории View, я могу сделать что-то вроде этого:
Примечание: CompleteEditorFor
и CompleteDropDownListFor
расширены методы, которые добавляют дополнительные HTML в каждой области, только для настройки макета.
@using (Html.BeginForm(null, null, FormMethod.Post))
{
@Html.CompleteEditorFor(x => x.Name)
@Html.CompleteEditorFor(x => x.Description)
@Html.CompleteEditorFor(x => x.Status)
@Html.CompleteDropDownListFor(x => x.Father.Id, ViewData["Categories"], "Id", "Name", "Select...")
@Html.SubmitButton()
}
Код выше работает только отлично.
Теперь есть проблема:
При нажатии на кнопку Сохранить, это делает HttpPost
, и это Action
для этого:
(ниже код имеет некоторые измененные строки сообщений и расширенные методы.) (CategoriesBLL
класс, который получает категории из базы данных.)
[HttpPost]
public ActionResult New(Category item)
{
ViewData.Add("Categories", CategoriesBLL.select());
try
{
if (ModelState.IsValid)//PROBLEM IS HERE!!!!!!!!!
{
if (CategoryBLL.insert(item) != 0)
{
ViewData.AddSuccess("Some Success Message");
return View(new Category());
}
else
{
ModelState.AddError("Some error message");
return View(item);
}
}
else
{
ModelState.AddError("Some SERIOUS error message");
return View(item);
}
}
catch (Exception ex)
{
ModelState.AddError("Some EVEN MORE SERIOUS message");
return View(item);
}
}
проблема заключается в if (ModelState.IsValid)
линии.
Почему?
Потому что мой класс Category
имеет обязательное свойство, называемое Name
. Мне не нужно это свойство, чтобы делать то, что я делаю, мне просто нужен Id
свойства Father
. Я могу получить эту Id
в этой строке на Вид:
@Html.CompleteDropDownListFor(x => x.Father.Id, ViewData["Categories"], "Id", "Name", "Select...")
И это работает.
Но свойство Name
- это null
, и оно требуется, но оно требуется только в том случае, если я сообщаю класс Child. Не класс Отца.
Я даже не знаю, как искать его на Google или StackOverflow ...
Может кто-нибудь мне помочь?
вы пытались удалить дочерние объекты прежде, чем утвердить или не отправлять их с формой? –
Мне нужно отправить объект отцов, но мне просто нужно 1 свойство, свойство Id. Имя также требуется, но не в этом отце. –