Как правильно создавать собственные связующие модели в MVC6?
Я пытаюсь выполнить шаги, описанные в этой статье, используя проект vNext и mvc 6. Я читал код здесь, но все еще немного не уверен, как это реализовать.
У кого-нибудь есть рабочий пример, которым они могли бы поделиться или указать мне правильное направление?
Мне особенно интересно, как зарегистрировать пользовательское связующее и какие классы я бы унаследовал, так как DefaultModelBinder недоступен.
3 ответа
Образец подшивки модели: https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNet.Mvc.Core/ModelBinding/CancellationTokenModelBinder.cs
Как зарегистрировать подшивку в Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().Configure<MvcOptions>(options =>
{
options.ModelBinders.Add(typeof(MyModelBinder));
});
Я сделал пост в блоге, который содержит образец обрезки строк в модели автоматически.
Сообщение в блоге находится здесь http://hotzblog.com/asp-net-vnext-defaultmodelbinder-and-automatic-viewmodel-string-trim/
Я заметил, что добавление напрямую в связующие модели не будет работать полностью, потому что связующие модели используются по порядку. Вам придется сначала удалить оригинальную модель связующего
services.AddMvc().Configure(options =>
{
// Replace MutableObjectModelBinder with extended Trimmer version
IModelBinder originalBinder = options.ModelBinders.FirstOrDefault(x=>x.GetType() == typeof(MutableObjectModelBinder));
int binderIndex = options.ModelBinders.IndexOf(originalBinder);
options.ModelBinders.Remove(originalBinder);
options.ModelBinders.Insert(binderIndex, new TrimmingModelBinder());
});
Это моя реализация MVC 6
RC1
обычай Model Binder
хотя я должен признать, что это еще не идеально. По какой-то причине getters
из ViewModel
получают удар, прежде чем значения связаны с ними, поэтому мы должны добавить if (xID == 0)
проверяет, что неубедительно... и я все еще ищу решение, в любом случае, это должно помочь некоторым: https://github.com/Serjster/IOCModelBinderExample
Не стесняйтесь вносить свой вклад, если вам удастся найти решение.