8 messaggi dal 26 marzo 2021
Buonasera,
Ho necessità di richiamare un metodo .Net dal JS, e ci sono riuscito senza problemi, il punto è che dentro a un metodo statico
non posso accedere all'istanza del servizio iniettato.
Come posso fare??
Button con evento click
 <button title="Elimina Azienda" @onclick="(()=>DeleteAzienda(azienda.AziendaID))" class="btn btn-icon btn-light-danger btn-sm mr-2">
                                            <span class="svg-icon">
                                                <!--begin::Svg Icon | path:/var/www/preview.keenthemes.com/keen/releases/2021-03-15-144509/theme/demo1/dist/../src/media/svg/icons/Home/Trash.svg--><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24px" height="24px" viewBox="0 0 24 24" version="1.1">
                                                    <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
                                                        <rect x="0" y="0" width="24" height="24" />
                                                        <path d="M6,8 L18,8 L17.106535,19.6150447 C17.04642,20.3965405 16.3947578,21 15.6109533,21 L8.38904671,21 C7.60524225,21 6.95358004,20.3965405 6.89346498,19.6150447 L6,8 Z M8,10 L8.45438229,14.0894406 L15.5517885,14.0339036 L16,10 L8,10 Z" fill="#000000" fill-rule="nonzero" />
                                                        <path d="M14,4.5 L14,3.5 C14,3.22385763 13.7761424,3 13.5,3 L10.5,3 C10.2238576,3 10,3.22385763 10,3.5 L10,4.5 L5.5,4.5 C5.22385763,4.5 5,4.72385763 5,5 L5,5.5 C5,5.77614237 5.22385763,6 5.5,6 L18.5,6 C18.7761424,6 19,5.77614237 19,5.5 L19,5 C19,4.72385763 18.7761424,4.5 18.5,4.5 L14,4.5 Z" fill="#000000" opacity="0.3" />
                                                    </g>
                                                </svg><!--end::Svg Icon-->
                                            </span>
                                        </button>


Il Click richiama la funzione seguente:
//Elimina azienda
    public async Task DeleteAzienda(int id)
    {
        await JSRuntime.InvokeVoidAsync("AlertDelete",id);
    }

Al suo interno richiama una funzione Javascript, di seguito la funzione JS
window.AlertDelete = (id) => {
    Swal.fire({
        title: "Vuoi rimuovere la riga selezionata?",
        text: "Questa azione è irreversibile!",
        icon: "error",
        showCancelButton: true,
        confirmButtonText: "Si, rimuovi!",
        cancelButtonText: "No, annulla!",
        reverseButtons: true
    }).then(function (result) {
        if (result.value) {

            DotNet.invokeMethodAsync('Timing', 'ConfDeleteAzienda',id)
                .then(data => {
                    if (data == "success") {
                        Swal.fire(
                            "Rimozione completata!",
                            "La rimozione è avvenuta con successo.",
                            "success"
                        )
                    } else {
                        Swal.fire(
                            "Errore Imprevisto, Contattare l'assistenza!",
                            "La riga selezionata non è stata rimossa :)",
                            "error"
                        )
                    }

                }
                );

            // result.dismiss can be "cancel", "overlay",
            // "close", and "timer"
        } else if (result.dismiss === "cancel") {
            Swal.fire(
                "Azione annullata",
                "La riga selezionata non è stata rimossa :)",
                "error"
            )
        }
    });


La funzione JS richiama a sua volta il metodo statico:
    [JSInvokable]
    //public static async Task<string> ConfDeleteAzienda(int id, IAmministrazioneService service)
    public static async Task<string> ConfDeleteAzienda(int id)
    {
        var ris = "";
        if (id != 0)
        {
            ris = await AziendaService.DeleteAzienda(id);
            return ris;
        }
        else
        {
            return ris = TC_StatusResult.Error;
        }

    }



Mi da errore in "AziendaService" come ho spiegato all'inizio.
Come posso fare???
Per richiamare un servizio dentro un metodo statico è necessario prima creare una proprietà statica del servizio che intendi utilizzare..
Poi nel costruttore o nel metodo OnInitialized nel caso di un component blazor assegni alla proprietà statica il valore del servizio che ti serve.. e a quel punto lo richiami dove ti è utile..

@inject ITestService _testService;
<button type="button" @onclick="Test">prova</button>


@code{

public static ITestService _myService { get; set; }

protected async override Task OnInitializedAsync()
{
_myService = _testService;
}

protected async static void Test()
{
var x = _myService.Method();

}

}
Non so se è la soluzione migliore ma ho appena provato e così sembra funzionare..
ciao!
8 messaggi dal 26 marzo 2021
Grazie mille ha funzionato

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.