2014-10-11 3 views
2

У меня есть список въездного вид модели, который в основном получил четыре свойства в.MVC пользовательские проверки с помощью modelstate.addmodelerror

public class Complaint 
{ 
    public int Id { get; set;} 
    public string Comments { get; set; } 
    public int RuleId { get; set; } 
    public int ResponseId { get; set; } 
} 

данные поступают через хорошо, и я могу видеть, что это будет связано с элемент списка List.

В зависимости от данных, содержащихся в RuleId, у ResponseId и Comments есть разные требования к правильной отправке. Я хочу использовать ModelState.AddModelError для этого. В прошлом, когда мне приходилось делать эту форму проверки, у меня были фиксированные имена полей на моем представлении. Но это приложение, я мог бы иметь 6 групп, я мог бы иметь 20. AddModelError берет имя свойства, чтобы связать ошибку, поскольку, как я уже упоминал, у меня есть переменное количество элементов в моем списке.

Кто-нибудь знает, как я могу перебрать мой список и узнать, что предмет, который я проверяю, относится к определенному полю формы в моем представлении?

foreach(var complaint in List<Complaint>) 
{ 
    if (complaint.RuleId == 1) && (complaint.Comments == null) 
    { 
     ModelState.AddModelError("INDIVIDUAL PROPERTY NAME NEEDED", "error message"); 
    } 
} 

Заранее спасибо

Тони

ответ

2

Try (при условии, model является List<Complaint>)

for(int i = 0; i < model.Count; i++) 
{ 
    if (model[i].RuleId == 1) && (model[i].Comments == null) 
    { 
    string propertyName = string.Format("[{0}].Comments", i); // returns "[0].Comments", "[1].Comments" etc 
    ModelState.AddModelError(propertyName , "error message"); 
    } 
} 

Это предполагает, что вы генерации элементов управления в окне с помощью for петли или пользовательские EditorTemplate для Complaint.cs

+0

Спасибо Стивен. Это сработало отлично. Не могу поверить, что я этого не пытался. Я искал какой-то объект, который бы содержал его! –