Мне было поручено преобразовать некоторый код, который есть в MVC, из .NET Framework в .NET Core.Код динамически связывает View с соответствующей моделью на основе простого шаблона.Имя представления - это первое поле на странице, которое передается.Например, если первое поле данных - PAGE1, то существует соответствующая Модель с именем PAGE1Model.Код выполняет динамическое связывание с использованием ModelBindingContext ().Этот код прекрасно работает в .NET Framework, но синтаксис в .NET Core.
Я попытался написать то, что, по моему мнению, будет эквивалентно .NET Core.Он компилируется, но не работает.Насколько я понимаю, на поверхности связывание в .NET Core и Framework дает одинаковые результаты, но внутри они разные, и я думаю, что именно это вызывает проблему.Так как я новичок в .NET Core, я потратил 3 дня на поиск кода, который будет динамически назначать модель для Binder, но каждый пример, который я могу найти, динамически меняет что-то внутри View или Model, но предполагает, что сами View и Model являютсяфиксированныйМоя единственная попытка .NET Core, которая не работает, -
public class ModelBinder : IModelBinder
{
public ModelBinder(MapModel pModel, ControllerContext pContext)
{
model = pModel;
context = pContext;
}
MapModel model;
ControllerContext context;
private readonly IModelBinder thisBinder;
public Task BindModelAsync(ModelBindingContext bindingContext)
{
if (bindingContext == null)
{
throw new ArgumentNullException(nameof(bindingContext));
}
bindingContext.Model = model;
bindingContext.ValueProvider = (IValueProvider) context;
return Task.CompletedTask;
}
}
, а новый вызов -
ModelBinder BindModel = new ModelBinder(Model, this.ControllerContext);
Я ожидал, что это выполнит то же самое, что и .NETКод платформы, но он ничего не делает, потому что задача BindModelAsync никогда не запускается.
Приложение является устаревшим приложением, перенесенным в C # .NET из мейнфрейма COBOL, поэтому я ограничен в том, что не могу изменитьформат ввода или соответствие между именем вида и названием модели.