2016-07-21 18 views
0

Was mache ich falsch Leute? Das ist die Idee ...Wie kann ich nur eine Teilansicht in ihrer Ansicht aktualisieren?

Index Ansicht

<div class="col-lg-12 col-md-12 col-xs-12"> 
    @Html.Partial("PartialView", Model) 
</div> 

-Controller

public ActionResult PartialView() 
{ 
    return PartialView("PartialView"); 
} 

[HttpPost, ValidateInput(false)] 
public ActionResult POSTPartialView(string param1) 
{ 
    return PartialView("PartialView"); 
} 

PartialView ein Formular hat. Das erste Mal, wenn ich in Index eintrage, funktioniert PartialView, aber das zweite Mal, nach einem POST-Aufruf (kommt aus dem Formular innerhalb von PartialView), ich musste nur die PartialView aus dem Index rendern.

So beheben es, ich mache das nächste:

[HttpPost, ValidateInput(false)] 
public ActionResult POSTPartialView(string param1) 
{ 
    return View("Index"); 
} 

, das funktioniert. Ich rendere alle Indizes neu (mit meinen Änderungen, nach POST). Aber ich aktualisiere alle Seiten, so dass ich ein paar CSS-Elemente verloren habe (zum Beispiel Akkordeon entfärbt).

Sollte ich Ajax nur für die Aktualisierung der div verwenden, die PartialView enthält?

Dank Mates.

EDITED:

@using (Html.BeginForm("PartialView", "Controller", FormMethod.Post, new { @class = "form-inline", role = "form" })) 
{ 
    <div class="form-group col-lg-3 col-md-3 col-xs-3"> 
     <label for="DATA">DATA:</label> 
     <input type="text" class="form-control pull-right" name="DATA"> 
    </div> 
    <button type="submit" class="btn btn-primary pull-right">Get Data</button> 
} 
+0

Können Sie uns zeigen Sie Ihre Form Erklärung? –

+0

Warum ist das relevant? Ein Standard One ... @ André Figueiredo –

+0

Weil es eine normale Form sein kann, eine Ajax-Form .. Sie geben keine vollständigen Informationen –

Antwort

1

Nun, las ich die Lösung (Auto Refresh Partial View). Ich veröffentliche es, klären Hoffnung, die Frage:

index.html

<div class="col-lg-12 col-md-12 col-xs-12" id="divPartial"> 
    @Html.Partial("PartialView", Model) 
</div> 
<script type="text/javascript"> 
    $("#buttonForm").click(function(e){ 
    $('#form').submit(); 
    $('#divPartial').load('/PartialController/PartialView'); 
    }); 
</script> 

PartialController

public ActionResult PartialView() 
{ 
    // DO YOUR STUFF. 
    return PartialView("PartialView", model); 
} 

[HttpPost, ValidateInput(false)] 
public EmptyResult POSTPartialView(string param1) 
{ 
    // DO YOUR STUFF AFTER SUBMIT. 
    return new EmptyResult(); 
} 
1

Teilansicht orientiert sich einige Teile des Codes in differents Ansichten wieder zu verwenden, aber wenn Sie ein Formular einreichen, wird die gesamte Ansicht neu geladen.

Wenn Sie nicht neu laden möchten, müssen Sie AJAX verwenden, um das Formular zu senden.

+0

Danke. Wie schließe ich mich beiden an?Können Sie mir ein einfaches Beispiel geben, wenn es Ihnen nichts ausmacht? @Borja Tur –

+1

Sie können Ajax-Anfrage verwenden, einfache Javascript-Funktionen in Ihrer Ansicht hinzufügen, aber ich empfehle, jquery für diesen Zweck der Einfachheit halber zu verwenden. Lass mich in jQuery nach einem funktionierenden Beispiel für einen Ajax-Aufruf suchen. –

+0

Danke @Borja Tur. Ich habe vorher Ajax benutzt, aber wenn ich versuche, es mit Partial View zu integrieren, fehlt mir etwas ... Wenn du bitte bist und du mir ein wirklich einfaches Beispiel liefern kannst, könnte ich von dort aus arbeiten ... Sogar durch mein einfaches Beispiel auch (mein Fragecode). Prost Borja! –

1

Teilansicht ist für die Wiederverwendung einige Teile des Codes in verschiedenen. Wenn eine Seite gesendet wird, wird die Ansicht erneut geladen, wenn Sie die Seitenaktualisierung vermeiden möchten. Sie können ajax verwenden.

-Code für View

$.ajax({ 
    type: "POST", 
    url: '@Url.Action("ControllerName", "ActionName")', 
    contentType: "application/json; charset=utf-8", 
    data: { data: "yourdata" }, 
    dataType: "json", 
    success: function(recData) { alert('Success'); }, 
    error: function() { alert('A error'); } 
}); 

-Code für Controller

public JsonResult ActionName(string yourdata) 
{ 
    return Json(p); \\ where p is you want to return 
} 
+0

Es könnte besser sein, das von der Teilansicht gerenderte HTML an den AJAX-Aufrufer zurückzugeben. 'public ActionResult ActionName() {var viewModel = neues MyViewModel(); Teilansicht zurückgeben ("_ MyParitalView", viewModel); } '. Um HTML zu empfangen, geben Sie in Ihrem Ajax-Aufruf den Standard-'contentType:" application/x-www-form-urlencoded; charset = UTF-8 ", dataType:" html "an. –