.NET CORE view свойство свойства типа object не связывает - PullRequest
0 голосов
/ 21 января 2019

У меня есть веб-приложение MVC, которое я портирую из .net framework на ядро ​​.net. Часть приложения имеет модель представления с рядом свойств, одно из которых имеет тип «объект».

В .net Framework, когда я публикую данные модели представления, контроллер получает их без проблем. Однако в .net CORE все свойства содержат ожидаемые значения, кроме того, которое является объектом.

Если я изменю тип на строковый, большинство будет работать нормально (но это означает, что если значение когда-либо будет int (например), это будет строковое представление типа int).

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

1 Ответ

0 голосов
/ 21 января 2019

Я действительно не чувствую, что это сработает.

Привязка модели использует отражение для сопоставления данных запроса, данных маршрута и строк запроса с параметром вашего метода действия.

Данные запроса - это, по сути, все строковые данные, и поэтому defaultmodelbinder может отобразить запрос в любой простой тип значения, такой как string, integer или bool, проверив, можно ли без ошибок преобразовать строку в int или bool.

Сложные типы, такие как объект Customer, которые содержат простые типы значений (например, string и int), также могут быть отображены с использованием этой же методологии. Пример сложного типа, подобного этому, показан здесь:

public class Customer
{
     public string Name {get;set} 
     public bool IsLongTermCustomer {get;set;}
}

Поскольку defaultmodelbinder использует отражение, я действительно не понимаю, как он узнает, как отобразить свойство типа «объект», которое может быть чем угодно.

Объектом может быть Customer, int, строка и т. Д., Поэтому я чувствую, что это не получится, независимо от того, какую версию MVC вы используете, потому что я не понимаю, как defaultmodelbinder узнает, можно ли перенести данные в объект тип данных. Вот подробная статья о привязке модели конкретно в ядре MVC и о том, как она работает.

https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-2.2

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...