reîmprospătarea/reîncărcarea PartialView în vizualizarea curentă

Am un PartialView care este o încărcare a imaginii și, practic, am afișat câteva imagini și apoi butoanele de încărcare normale: -

@model MvcCommons.ViewModels.ImageModel

<table>
    @if (Model != null)
    {
        foreach (var item in Model)
        {
            <tr>
                <td>
                    
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Description)
                </td>
            </tr>    
        }
    }

</table>

@using (Html.BeginForm("Save", "File", FormMethod.Post, new { enctype = "multipart/form-data" })) {
    <input type="file" name="file" />
    <input type="submit" value="submit" /> 
<input type="text" name="description" /> }

Acum, ideea mea este să am acest lucru în pagini diferite. Am încercat-o deja în 1 pagină și funcționează bine, totuși atunci când încărc o imagine,

public ActionResult ImageUpload()
{
    ImageModel model = new ImageModel();
    model.Populate();
    return View(model);
}

Vreau să mă întorc la vizualizarea "anterioară", adică la Vederea care găzduiește această vizualizare parțială? Când fac retur View (model) ca mai sus, intră în vizualizarea parțială ImageUpload pe care nu vreau să o fac.

Vă mulțumim pentru ajutor și timp.

***UPDATE********* I went for the simple route for the time being, and hard coded the actual View name

public ActionResult ImageUpload()
{
    ImageModel model = new ImageModel(); 
    model.Populate(); 
    return View("~/Views/Project/Create.cshtml", model); 
}

cu toate acestea am primit o eroare: -

Elementul model trecut în dicționar este de tip MvcCommons.ViewModels.ImageModel , dar acest dicționar necesită un element model de tip MvcCommons.Models.Project .

0

1 răspunsuri

Utilizați suprasarcina care ia un șir de nume al vizualizării pe care o doriți.

http://msdn.microsoft.com/en-us/library/dd460310

protected internal ViewResult View(
        string viewName,
        Object model
)

adică

return View("ViewName", model);

dacă aveți acest lucru în pagini diferite, atunci puteți injecta context prin intermediul paramaters de acțiune;

public ActionResult ImageUpload(string parentViewName)
{
    ImageModel model = new ImageModel();
    model.Populate();
    return View(parentViewName, model);
}

NOTĂ: Trebuie doar să treci numele de vizualizare nu pe cale:

return View("Create", model);
2
adăugat
a adăugat mai multe informații: dați-i ultimul încercați, spuneți-mi dacă funcționează?
adăugat autor jflood.net, sursa
da nu este sigur ce în cazul în care "Dictionarul" u menționează este în cod. Combinați modelele din interiorul acțiunii, dacă acest lucru este necesar.
adăugat autor jflood.net, sursa
Dacă vă provoacă prea multe probleme, poate că trebuie să vă regândiți designul.
adăugat autor jflood.net, sursa
Nu este întrebarea "Vreau să mă întorc la vizualizarea" anterioară ", adică la vizualizarea care găzduiește această vizualizare parțială?" Ați încercat sugestia mea de a transmite numele paragrafelor parinte ca parametru al acțiunii?
adăugat autor jflood.net, sursa
Bună Jflood, în ce controlor fac asta? ImageUpload nu poate fi așa cum pot obține numele precedent? Această vizualizare parțială se va afla în vizualizări diferite.
adăugat autor Johann, sursa
Bună Jflood, am încercat ultima, dar ParentActionViewContext a fost nulă. De asemenea, mi-am actualizat întrebarea, cu exemplul pe care l-ați sugerat mai sus, cu toate acestea am codificat-o greu să fac pentru moment doar pentru a face să funcționeze. Încă o eroare
adăugat autor Johann, sursa
Vreau să trec două modele, deși cred că nu este posibil. Un model care retreapă proiectele și un model anter care retreapă imaginile. altceva trebuie să fac una combinată, dar apoi pentru fiecare Entitate pe care o am, deoarece majoritatea vor avea imagini.
adăugat autor Johann, sursa
Deci, practic, nu există altă modalitate de a afișa PartialView în interiorul paginilor diferite? Trebuie să pre-populez modelul cu entitățile și imaginile lor, în funcție de variabila pe care o am în Acțiune. Pare a fi un pic prea mult pentru ceea ce am nevoie Cred
adăugat autor Johann, sursa
Multumesc Alfalfa se va uita la link. Re-gândiți-mi designul. Ei bine, am crezut că pot face același lucru ca în mod obișnuit în paginile web normale ASPNET, adică un controler de încărcare a imaginilor și folosirea lui în pagini diferite, ghici în MVC este mult mai complicat!
adăugat autor Johann, sursa
@Alfalfa M-am uitat la acest exemplu, dar cred ca in cazul meu este mai bine pentru mine sa adaug un List in Modelele pe care trebuie sa le arat imagini si apoi voi avea totul intr-un singur model.
adăugat autor Johann, sursa
De fapt, Alfalfa ai dreptate, ți-am găsit abordarea mult mai simplă, mai ales când veneai să faci editare complementară pe modelul de imagini. Vă mulțumim mult pentru sugestie. Am terminat crearea unui alt ViewModel pentru Proiecte, apoi un compozit pentru ViewModel Imagini și Proiecte ViewModel. Voi adăuga și alte entități într-un mod similar.
adăugat autor Johann, sursa
mulțumesc Alfalfa, am făcut +1 pentru răspunsul Jfloods și l-am acceptat ca răspuns, trebuie să fac alt +1? Ne pare rău nu am folosit pentru a stackoverflow atât de mult
adăugat autor Johann, sursa
făcut :)) a adăugat +1
adăugat autor Johann, sursa
@Johann nu puteți trece două modele dintr-o acțiune a controlerului la Vizualizare sau invers, trebuie să utilizați un model compozit pentru asta, vedeți aici stackoverflow.com/questions/10720756/…
adăugat autor CD Smith, sursa
Sunt de acord că, dacă vorbești doar despre multiplii unei imagini, lucrurile funcționează bine, dar dacă multiplii ar fi un obiect mai complex, ai putea chiar să faci asta și să folosiți o foreach și să construiți obiectele afară. Am impresia că editați doar două obiecte distincte și că trebuie să le trimiteți la o vizualizare, în acest caz folosiți un compozit
adăugat autor CD Smith, sursa