ASP. NET Базовая привязка модели для принудительного использования префикса для сложных типов - PullRequest
1 голос
/ 06 марта 2020

С учетом модели:

public class MyModel
{
    public MyModel()
    {
    }

    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
}

и действия контроллера:

public async Task<IActionResult> MyAction(MyModel myModel) {}

как добиться поведения привязки модели таким образом, чтобы это правильно связывалось:

www.host.blah/page?MyModel.Prop1=a&MyModel.Prop2=b

и это не связывает (без префикса):

www.host.blah/page?Prop1=a&Prop2=b

Я не уверен в правильной терминологии, но, судя по Связывание модели в ASP . NET Core :

Для каждого свойства сложного типа привязка модели просматривает источники для шаблона имени prefix.property_name. Если ничего не найдено, он ищет только имя_свойства без префикса.

, но я хочу избежать этого отката по умолчанию без префикса.

Если это вообще актуально, я пытаясь выполнить это sh, поскольку рассматриваемый контроллер может быть встроен в другие контроллеры / страницы, как вложенная вкладка в пользовательском интерфейсе, поэтому я не могу контролировать, какие другие параметры строки запроса будут существовать в этой точке.

1 Ответ

1 голос
/ 06 марта 2020

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

using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Http.Extensions;

public override void OnPageHandlerSelected(PageHandlerSelectedContext context)
{
    //...
    var querystring = QueryHelpers.ParseQuery(context.HttpContext.Request.QueryString.Value);
    var items = querystring.SelectMany(x => x.Value, (col, value) => new KeyValuePair<string, string>(col.Key, value)).ToList();
}

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

Дальнейшее чтение :

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