Ciao,
nella speranza di trovare aiuto e darlo ai prossimi dopo di me, espongo il mio problema.
Nel nostro programma c'è una sezione di ricerca, i cui risultati appaiono in una tabella.
Gli elementi di questa tabella sono una serie di informazioni (Id, nome, cognome, etc...) presi da un database tramite MVC.
Vorrei riuscire a scaricare queste informazioni in un foglio Excel.
Nella pagina .cs ho già costruito una funzione che viene richiamata dalla view e che tramite la libreria NPOI costruisce il File Excel.
La funzione però accede direttamente al DB, non tiene conto dei dati nella ricerca.
Io invece vorrei tenerne conto per scaricare solo i risultati ricercati.
Per fare ciò, sarebbe molto bello prendere semplicemente la variabile "ViewBag" e darla in pasto alla funzione, ma non ci riesco.
In alternativa mi basterebbe riuscire ad avere almeno l'Id, così da poter costruire l'Excel con le informazioni nella riga dell'Id presente.
Adesso posto il codice.
codice:
[...]
<tbody class="table-custom-clickable-row">
@foreach (var item in Model)
{
<tr class="clickable-row" data-href="@Url.Action("Details", new { id = item.Id, socId = item.SocietaId })">
<td>
@Html.DisplayFor(modelItem => item.Id)/
@Html.DisplayFor(modelItem => item.SocietaId)
</td>
<td>@Html.DisplayFor(modelItem => item.userModifica.UserName)</td>
<td>@Html.DisplayFor(modelItem => item.societaTrat.NomeSocieta)</td>
<td>@Html.DisplayFor(modelItem => item.societaTrat.RuoloSocieta)</td>
<td>@Html.DisplayFor(modelItem => item.InformazioniAttivita.Finalita)</td>
<td>@Html.DisplayFor(modelItem => item.InformazioniAttivita.CategoriaDati)</td>
<td>@Html.DisplayFor(modelItem => item.InformazioniAttivita.FunzioneAziendale)</td>
<td>@Html.DisplayFor(modelItem => item.InformazioniAttivita.ApplicativiCorrelati)</td>
<td>
@Html.DisplayFor(modelItem => item.DataModifica)
</td>
<td class="text-center">
@if (item.Stato == RegistroPrivacy.Models.Stato.NonConvalidato)
{
<i class="fa fa-2x fa-dot-circle-o" style="color:gold"></i>
}
else
{
<i class="fa fa-2x fa-dot-circle-o" style="color:green"></i>
}
</td>
</tr>
}
</tbody>
</table>
[...]
Questa è la parte di codice della view .cshtml, che mostra la tabella con le informazioni.
Come potete vedere i valori vengono presi e sputati dinamicamente (parte in grassetto) dalla variabile item ("punto qualcosa").
Ho provato a prendere la variabile item e darla in input alla funzione, ma non funziona...
immagino che forse essendo dentro un ciclo "foreach", la variabile item muoia appena finisce il ciclo, giusto?
In seguito creo un pulsante per richiamare la funzione "GetMessage()":
codice:
<div>
<input class="btn btn-info-custom" type="button" onclick="GetMessage()" value="Scarica Excel"/>
<p></p>
Funzione presente in una sezione di script Javascript:
codice:
<script>
function GetMessage()
{
$.get("/RPImport/GetMessage", function (data)
{
$("p").html(data);
});
}
</script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
Nella pagina .cs invece ho la funzione vera e propria che funziona, creo il foglio Excel e riesco ad accedere al DB.
Però mi servirebbe almeno l'Id e il SocietaId per andare a prendere i valori giusti.
codice:
public ActionResult GetMessage()
{
HSSFWorkbook hssfworkbook = new HSSFWorkbook();
//Apertura istanza database
using (var context = new Models.SocietaModelContainer("sdemo"))
{
var Responsabile = context.RPSoggettiPartecipantiSet.Local[0].Id;
}
[Etc...]
In un altro programma (costruito da me in modo più semplice) facevo una cosa tipo:
codice:
serverInput = Request["serverSelect"];
Però potevo farlo perchè il valore era dentro un menù a tendina ed era presente il tag "id=serverSelect" dell'elemento html.
Invece qui non so come fare.. ho provato ad assegnare un id al tag <td> della tabella, ma non funziona, anche perchè poi con la costruzione dinamica, ho più tag associati allo stesso id e questo è sicuramente un problema.
Qualche suggerimento?
Cordialmente,
Raimondo
Ps: nelle pagine seguenti posto il codice completo, ho fatto dei ritagli perchè così è più chiaro secondo me