Пример < /strong> < /p>
Код: Выделить всё
class MyModel{
public string Name{get;set;}
}
public class MyController:Controller{
public IActionResult Test(MyModel model) {
// Will hiddenly fail when "Name" is renamed to something else
ModelState.AddModelError("Name", "The Name field is required!");
// Better: Using the auto renaming feature of VS, this will be updated if "Name" was renamed
ModelState.AddModelError(nameof(model.Name), "The Name field is required!");
}
}
< /code>
Это работает, пока у меня не появится другая сущность: < /p>
class MyModel{
public string Name{get;set;}
public MyOtherModel OtherModel{get;set;}
}
class MyOtherModel{
public string OtherName{get;set;}
}
< /code>
Теперь я хочу получить имя другого модели < /code>. Проблема: ASP.NET требует здесь шаблона BaseClass.ChildClass, поэтому в этом примере другие model.othername
Код: Выделить всё
public class MyController:Controller{
public IActionResult Test(MyModel model) {
ModelState.AddModelError(nameof(model.MyOtherModel.OtherName), "The Name field is required!");
}
}
< /code>
просто даст мне имя атрибута ребенка, так что в этом примере другое < /code>. Но мне нужно другое model.othername
Это было бы возможно сделать что -то подобное: < /p>
string actionName = nameof(model.MyOtherModel) + "." + nameof(model.MyOtherModel.OtherName);
< /code>
Но не очень чистый и интуитивно понятный способ imho.
Подробнее здесь: https://stackoverflow.com/questions/412 ... modelerror