Напишите функцию generi c, чтобы открыть модал - PullRequest
1 голос
/ 10 апреля 2020

имеют следующую ситуацию. На моей странице бритвы у меня есть 40 кнопок, каждая из которых открывает один из 40 Blazored-модалов:

<div class="row">
    ...
    <button type="button" @onclick="@(() => ShowComBoxModal())">
      ComBox Parameters
    </button>
</div>

<div class="row">
  ...
    <button type="button" @onclick="@(() => ShowGTLSModal())">
        GTLS Parameters
    </button>
</div>

Для каждого из 40 модалей я написал процедуру для открытия модала, например:

void ShowComBoxModal()
    {
        var parameters = new ModalParameters();
        parameters.Add("PkId", CurrentD5User.PkId);
        parameters.Add("SystemID", 7);
        parameters.Add("cfg", cfgComBox);

        ModalService.Show<ModalComBox>("ComBox", parameters);    
    }

void ShowGTLSModal()
    {
        var parameters = new ModalParameters();
        parameters.Add("PkId", CurrentD5User.PkId);
        parameters.Add("SystemID", 8);
        parameters.Add("cfg", cfgGtls);

        ModalService.Show<ModalGTLS>("GTLS", parameters);    
    }

Я хотел бы устранить избыточность наличия почти одного и того же кода 40 раз, написав один метод c. Проблема в том, что я могу передать PkId и SystemID этому методу, потому что они являются строками, но у меня действительно возникли проблемы: а) иметь модальный объект для вызова в <> части метода .Show и б) передать потому что каждый cfgObject имеет один из 40 различных типов, и мне пришлось бы привести его к исходному типу. Я хотел бы иметь что-то вроде этого:

<button type="button" @onclick="@(() => ShowGTLSModal<ModalGTLS>(@CurrentD5User.PkId, 8, "cfgGtls"))">
            GTLS Parameters
        </button>

void ShowModal<T>(string PkId, string SystemID, object cfgObject) 
{
var parameters = new ModalParameters();
parameters.Add("PkId", PkId);
parameters.Add("SystemID", SystemID);
parameters.Add("cfg", cfgObject);

ModalService.Show<T>("GTLS", parameters);    
}

Мои объекты cfgObject бывают разных типов:

GoodwillPkw cfgGodwill = new GoodwillPkw();
ComBox cfgComBox = new ComBox();
Gtls cfgGtls = new Gtls();
ConnectMe cfgConnectMe = new ConnectMe();
...

Так что мне придется привести этот объект обратно к его исходному типу И иметь Show-method использует тип, который я получаю в этом методе. Последнее я смог бы достичь в каждом из 40 классов модальных компонентов. Но у меня возникли проблемы с добавлением класса модальных компонентов в элементе <>.

Это возможно как-то?

...