Как передать более 4 параметров в ViewComponent в ASP.NET Core MVC - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть ViewComponent, и мне нужно передать более 4 значений ViewComponent, но когда я пытаюсь, это дает мне ошибку ниже.

Ошибка CS0746 Недопустимый декларатор члена анонимного типа. Члены анонимного типа должны быть объявлены с назначением члена, простым именем или доступом участника.

Код выглядит следующим образом.

public async Task<IViewComponentResult> InvokeAsync(
    string A, string B, string C, string D, string E)
{

}

Вызов ViewComponent

@await Component.InvokeAsync(
    "ViewComponent2",
    new { A = Model.A, filter = "B", C = Model.C, Model.D, "2" })

Я буду использовать TagHelper для передачи данных и есть ли способ передать модель в ViewComponent, я пробовал, но параметр всегда нулевой.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

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

public class InvokeRequest
{
    public string A { get; set; }
    public string B { get; set; }
    public string C { get; set; }
    public string D { get; set; }
    public string E { get; set; }
}

public async Task<IViewComponentResult> InvokeAsync(InvokeRequest request)
{
    //...
}

@await Component.InvokeAsync("ViewComponent2", new InvokeRequest(){ A = Model.A, B = "B", C = Model.C, D = Model.D, E = "2" })
0 голосов
/ 06 сентября 2018

Сама ошибка компилятора не имеет ничего общего ни с ViewComponents, ни с 4 параметрами: проблема в "2" в вашем анонимном типе, который недопустим. Создаваемый вами анонимный тип имеет следующие четыре параметра:

  • A = Model.A
  • filter = "B"
  • C = Model.C
  • D = Model.D - здесь создается имя D для анонимного типа неявно .

Однако следующий параметр - "2 ", без имени и неявного создания свойства. Если вы хотите, чтобы последний параметр компилировался, вам нужно дать ему собственное имя, например:

new { A = Model.A, filter = "B", C = Model.C, Model.D, E = "2" }

EDIT

Я должен был упомянуть, что вам понадобятся имена свойств анонимного типа, совпадающие с теми, которые объявлены в вашей функции InvokeAsync, что означает, что вам нужно изменить filter на B, чтобы чтобы эта часть работала. ответ Тодда Скелтона предлагает более безопасный подход к решению этой проблемы, однако.

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