2013-02-28 8 views
26

Gibt es eine Möglichkeit, ein Teilansichtsformular in asp.net mvc einzureichen, ohne die übergeordnete Seite neu zu laden, aber die Teilansicht nur in ihren neuen Zustand zu laden? Ähnlich wie knockout.js mit Data-Bind aktualisiert.Können Sie nur eine Teilansicht anstelle von Ganzseitenpost aktualisieren?

Meine Datentabelle rendert mit einer variablen Anzahl von Spalten/Namen, also glaube ich nicht, dass knockout.js eine Option für diese ist, also versuche ich stattdessen eine Teilansicht zu verwenden.

Antwort

36

Nicht ohne jQuery.

Was müssen Sie tun würden, gesetzt wird Ihren Teil in einem div, so etwas wie:

<div id="partial"> 
    @Html.Partial("YourPartial") 
</div> 

Dann aktualisieren (zum Beispiel eine Schaltfläche mit der ID button klicken), könnten Sie tun:

$("#button").click(function() { 
    $.ajax({ 
     url: "YourController/GetData", 
     type: "get", 
     data: $("form").serialize(), //if you need to post Model data, use this 
     success: function (result) { 
      $("#partial").html(result); 
     } 
    }); 
} 

Dann würde die Aktion in etwa so aussehen:

public ActionResult GetData(YourModel model) //that's if you need the model 
{ 
    //do whatever 

    return View(model); 
} 
+0

Ich werde dank – Rayshawn

+0

Web-Entwicklung eine schöne Lösung Dies ist für jemanden diesem einen Versuch, geben, der versteht, aber # mvc nicht c. – MurWade

+0

@MurWade Es tut mir leid, ich verstehe nicht, warum diese Lösung nicht für jemanden anwendbar ist, der MVC & C# verwendet ?? Kannst du es ausarbeiten? –

11

Eigentlich, wenn Ihr Teil hat eine untergeordnete Aktionsmethode, Sie können direkt an die untergeordnete Aktion posten (oder sogar einen Ankerlink verwenden) und einen Ajax-ähnlichen Affekt erhalten. Wir machen das in mehreren Ansichten.

Die Syntax ist

@Html.Action("MyPartial") 

Das Kind Aktion

public ActionResult MyPartial() 
{ 
    return PartialView(Model); 
} 

Wenn Ihr Formular Beiträge für das Kind Aktion

@using (Html.BeginForm("MyPartial")) 
{ 
    ... 
} 

die Teilansicht mit der Teilansicht aktualisiert werden ist von der Kinderaktion zurückgegeben.

Jquery ist immer noch eine legitime Möglichkeit, eine partielle zu aktualisieren. Aber technisch ist die Antwort auf Ihre Frage JA.

+0

Versuchen Sie dies auch. – Rayshawn

+0

Dave, kannst du mehr darüber erfahren, wie das funktioniert?Ich hätte erwartet, dass dies dazu führt, dass die Teilansicht, die von dem geposteten Formular zurückgegeben wird, als neue Seite angezeigt wird und nicht an Ort und Stelle aktualisiert wird. – JohnnyHK

+0

@JohnnyHK, hätte ich das auch erwartet. Dies führt überraschenderweise dazu, dass die Teilansicht nicht an die übergeordnete Ansicht zurückgegeben wird, sondern an die übergeordnete Ansicht. Einen Effekt wie einen Ajax-Anruf zu haben. –

1

würde ich die Ajax-Formular-Helfer für solche Szenarien verwendet, um eine Teilansicht und @ Html.RenderPartial („partialname“) partial helpers

1

So normal, was ich finde, wenn die Suche nach Dingen wie diese Menschen geben zu verwenden begrenzte Informationen, so werde ich versuchen, hier zu helfen. Der Schlüssel ist, ein Div mit einer ID einzurichten, an die Sie das return html anhängen können. Auch wenn Sie Ihren Controller schlagen, stellen Sie sicher, dass es die Partiellen zurückgibt. Es gibt einige mögliche Probleme mit dieser Methode, aber an einem guten Tag sollte es funktionieren.

<div id="CategoryList" class="widget"> 
    @{ 
     Html.RenderPartial("WidgetCategories.cshtml"); 
    } 
</div> 

      function DeleteCategory(CategoryID) { 
      $.get('/Dashboard/DeleteWidgetCategory?CategoryID=' + CategoryID, 
       function (data) { 
        if (data == "No") { 
         alert('The Category has report widgets assigned to it and cannot be deleted.'); 
        } 
        else { 
         $('#CategoryList').html(data); 
        } 

       } 
      ); 
     } 


    [HttpGet("DeleteWidgetCategory")] 
    [HttpPost("DeleteWidgetCategory")] 
    public IActionResult DeleteWidgetCategory(string CategoryID) 
    { 
     string Deleted = CategoryModel.DeleteCategory(CategoryID); 

     if (Deleted == "Yes") 
     { 
      return PartialView("WidgetCategories"); 
     } 
     else 
     { 
      return this.Json("No"); 
     } 
    }