2013-02-10 10 views
9

Ich bin neu bei .NET mvc.Teilansicht nach dem Einreichen aktualisieren Ajax.Beginform

In einer Ansicht "DisplayThings" Ich habe so etwas wie:

@foreach (var thing in Model) 
{ 
    @Html.Partial("DisplayPartial", thing) 
} 

In der Teilansicht "DisplayPartial" Ich habe

@using (Ajax.BeginForm("Afunc", new AjaxOptions())) 
{ 
    @Html.EditorFor(model => model.AstringThing) 
    @Html.EditorFor(model => model.AintThing) 

    <input type="submit" name="submit" value="Ajax Post" /> 
} 

Im Moment ist das "Afunc" -Action speichert das Modell an die Datenbank und leitet dann zu einer Controller-Aktion um, um alle "Dinge" aus der Datenbank abzurufen und die gesamte "Displaythings" -Ansicht zu rendern.

Meine Frage ist: Wenn ich einen der Submitbuttons drücke (Es gibt einen Submitbutton für jedes "Ding" in der Liste). Ich möchte nur diese Teilansicht, um meine Änderung nachzuladen. Ich möchte nicht die gesamte Ansicht "Displaythings" neu laden. Wie mache ich das? Wenn ich nur eine Teilansicht zurückgebe, verliere ich alles andere als diese Teilansicht.

Wenn dies ein schlechter Ansatz ist, bitte geben Sie mir eine Wegbeschreibung.

Update:

ich noch etwas falsch zu machen bin, als ich die Teilansicht in einer neuen Seite gerendert bekommen. Mein Controller:

public ActionResult Afunc(ThingModel thingmodel) 
{ 
    // do 

    return PartialView("DisplayPartial", thingmodel); 
} 

ich versucht habe, mit UpdateTargetId und onsuccess beide mit dem gleichen Ergebnis (eine neue Seite)

Antwort

12

Im AjaxOptions, dass Ihr einfach jetzt als new AjaxOptions vorbei können Sie das Zielelement spezifizieren die Verwendung von UpdateTargetId Eigenschaft:

<div id="unique_thing_id"> 
@using (Ajax.BeginForm("Afunc", new AjaxOptions { UpdateTargetId = 'unique_thing_id' })) 
{  
} 
</div> 

Oben, ein Behälter mit einzigartiger ID für jedes "Ding" ist mit <div id="unique_thing_id"> vertreten. Dies wird durch die Antwort der Anfrage ersetzt. Ändern Sie Afunc, um nur das bestimmte "Ding" teilweise darzustellen.

+3

Ich werde Sie akzeptieren, da Sie auf etwas hingewiesen haben, das mir fehlte. THat war jedoch nur eines von 2 Dingen, die ich vermisst hatte. Ein häufiges Problem ist das Vergessen (nach dem Surfen im Internet), dies zu Ihrer Layoutseite hinzuzufügen: Andreas

+0

@manojlds Ich öffnete eine neue Frage, können Sie bitte [diese] (http://stackoverflow.com/questions/30868493/form-reload-but-partialview-cannot-with-ajax-in) -mvc? noredirect = 1 # Kommentar49779357_30868493) Frage? –

Verwandte Themen