Il passaggio di dati da Vista Parziale del suo genitore, Vista

Se ho una Vista e una Vista Parziale, c’è un modo che posso passare i dati dal Parziale Vista del genitore?

Quindi, se ho View.cshtml:

<div id="@someDataFromPartialSomehow">
    @Html.Partial("_PartialView")
</div>

E _PartialView.cshtml:

@{ someDataFromPartialSomehow = "some-data" }

<div>
    Some content
</div>

Come posso fare per realizzare qualcosa di simile a questo?

Ho provato ad usare ViewBag.SomeDataFromPartialSomehow, ma questo solo risultati nella null nel Genitore.


Un tentativo

Per provare ad aggirare il problema dei dati generati prima di essere chiamato, ho provato questo:

View.cshtml:

@{ var result = Html.Partial("_PartialView"); }

<div id="@ViewData["Stuff"]">
    @result
<div>

_PartialView.cshtml:

@{ ViewData["Stuff"] = "foo"; }

<div>
    Content
</div>

Ma la chiamata a @ViewDate["Stuff"] rende ancora nulla purtroppo.

  • Che cosa si intende per “passare i dati dal Parziale Vista del genitore” esattamente?
  • L’esempio che ho dato, l’idea è che l’ID della confezione div viene impostato dalla parziale vista.
InformationsquelleAutor dav_i | 2013-11-04



5 Replies
  1. 24

    Si potrebbe condividere lo stato tra le viste utilizzando HttpContext.

    @{
        this.ViewContext.HttpContext.Items["Stuff"] = "some-data";
    }

    e poi:

    @{ var result = Html.Partial("_PartialView"); }
    
    <div id="@this.ViewContext.HttpContext.Items["Stuff"]">
        @result
    <div>

    Tranne che l’esempio che hai mostrato la tua domanda:

    <div id="@someDataFromPartialSomehow">
        @Html.Partial("_PartialView")
    </div>

    si sta tentando di utilizzare il someDataFromPartialSomehow anche PRIMA invocando la vista parziale che, ovviamente, è impossibile.

    Anche tenere a mente che ciò che si sta cercando di realizzare è di cattivo design. Se una vista parziale può lavorare solo nell’ambito di alcuni specifici genitore, quindi potrebbe essere necessario ripensare la vostra separazione di vista. Parziale vista è qualcosa che deve essere INDIPENDENTE e RIUTILIZZABILI, non importa in quale contesto viene inserito. Se si assume cose sull’hosting padre poi c’è un grave problema di progettazione di qui.

    • Stavo pensando più come meta-dati passati di padre in cui il genitore può fare uso di esso – il PartialView non si lamentano se tali dati non sono utilizzati in modo ancora è generalmente indipendente e riutilizzabili, solo con aggiunta di zuccheri, se il padre può fare uso di esso. Chiaramente i dati ottenuti dopo il requisito è stato chiamato, ma questo è parte del problema!
    • Si prega di vedere il mio aggiornamento a vedere quello che ho provato.
    • Vedere il mio aggiornati risposta. Si potrebbe utilizzare HttpContext per condividere i dati. Ma ancora una volta, si prega di non farlo, è un terribilmente cattivo design. Ci sono modi migliori per raggiungere il tuo obiettivo originario.
    • Grazie per il tuo aggiornamento – funziona a meraviglia – anche se sente un po ‘ sporco! Cosa c’è di meglio modi suggeriresti?
    • Io non riesco a pensare a un modo, perché non so cosa stai cercando di ottenere/di risolvere, in primo luogo. La tua domanda è solo chiesto come passare i dati da vista parziale vista padre ma non ha mai spiegato perché è necessario farlo, in primo luogo.
    • Che cosa sarebbe la migliore via per utilizzare un riutilizzabili messaggio che restituisce un valore per il genitore vista? Sembra che sarebbe di cattivo design per copiare e incollare la stessa pop-up prompt di codice su molti punti di vista.

  2. 3

    Ho un suggerimento per voi.

    Messo campi di input nascosti nella vista laterale e ottenere loro di javascript.

    Ex: In _PartialView.cshtml

    <input type="hidden" id="someDataFromPartialSomehow" value="5" />

    A vostro parere,

    <script>
    $(document).ready(function(){
       var someDataFromPartialSomehow = $("#someDataFromPartialSomehow").val();
    });
    </script>

    Di notare che è necessario scrivere la funzione js all’interno del documento pronto funzione a causa partial view dovrebbe essere completamente caricato.

    • Grazie, questo è un prezzo intorno. Idealmente sarò io a cercare un pure-asp.net risposta ma +1 a tutti lo stesso!!!
  3. 0

    Si può semplicemente utilizzare javascript per questo.
    Ho nascosto il controllo textbox in vista parziale e voglio accedere è il valore in vista padre

    <input type="text" name="allexamcount" id="allexamcount" value="@TempData["allexamcnt"]" hidden />

    Modo più semplice è seguire:

    var allexamcount = document.getElementById("allexamcount").value;
    document.getElementById("examcount").value = allexamcount ;
  4. 0

    La più semplice cosa che si può fare è in _PartialView.cshtml:

    @model dynamic
    @{ 
        Model.Stuff = "stuff things";
    }

    e in vista padre:

    @{ 
        Html.RenderPartial("_PartialView", (object) ViewBag);
    }

    quindi in vista padre che è possibile utilizzare:

    @ViewBag.Stuff

Lascia un commento