Проверка модели в представлении, когда модель представляет собой список <SomeModel> - PullRequest
3 голосов
/ 29 марта 2019

У меня есть приложение asp.net core 3.0 MVC.В этом приложении я могу перечислять, создавать, редактировать и удалять некоторые объекты (datarows).Существуют представления для всех этих операций:

  • / Index.csltml (список всех элементов в просмотре данных)
  • / Create.cshtml
  • / Update.cshtml
  • / Delete.cshtml

Все это, в т.ч.проверка работает очень хорошо.Но я не могу найти способ проверить элементы в индексе.Когда я редактирую элементы с помощью приложения, ввод проверяется, и я не могу ввести неверные данные.Но когда данные уже загружены неверно, подсказка не отображается при отображении представления.Особенно в представлении индекса, я хочу показать какой-то предупреждающий индикатор в каждой затронутой строке.

Есть ли способ проверки модели в представлении при ее повторении по списку?Или есть лучший подход для этого?

//Index View
@model List<SomeModel>
<tbody>
@foreach (SomeModel m in Model)
{
    //... Validation here please!
}
</tbody>


public class SomeModel : IValidatableObject
{
    [Required()]
    public Guid ModelId;

    [Required()]
    [StringLength(50, MinimumLength = 5)]
    public string ModelProperty:

    ...

    more properties

    ...

    IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
    {
    }   
}

public class SomeController
{
    [HttpGet()]
    public IActionResult Index()
    {
        List<SomeModel> _models = SomeModel.GetModels();
        return View(_models);
    }
}

[HttpPost()]
[Route("Create")]
public IActionResult HttpPostCreate(SomeModel _model)
{
    // When posting data, the data arrives validated in the controller method
    if (ModelState.IsValid)
    {
        bool success = SomeModel.CreateSetting(_model);
        if (success)
        {
            return RedirectToAction("Index");
        }
    }
    return View("Create", _model);
}

1 Ответ

0 голосов
/ 29 марта 2019

Это было на самом деле очень просто. Как упомянуто в этом великом уроке.

@using System.ComponentModel.DataAnnotations
<tbody>
    @foreach (SomeModel m in Model)
    { 
        ValidationContext vc = new ValidationContext(m);
        ICollection<ValidationResult> results = new List<ValidationResult>(); 
        bool isValid = Validator.TryValidateObject(m, vc, results, true);
    }
</tbody>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...