mvc-3 postback nicht aktualisieren Bildschirm

Ich bin neu in der MVC, so haben einige konzeptionelle Probleme. Ich habe ein WebGrid, füllt Sie mit Daten aus einem viewmodel, und das ist eine DropDownList, die der Benutzer auswählen kann, wie viele Datensätze zurückgegeben werden (50, 100, usw.), das ist auch eine Eigenschaft, auf die VM. Ich hab die DDL ' s onchange-client-side-event zu feuern.form.submit() und meine controller-action bekommt der POST. Das Problem ist die Logik für das aktualisieren der Ansicht nicht Feuer. Die Ansicht einfach updates den ausgewählten Wert in der DDL.

/* Controller-Aktionen */

public ShopsController()
{
    ViewBag.PageList =
    new SelectList(new[] { 10, 15, 25, 50, 100, 1000 }
        .Select(x => new { value = x, text = x }), "value", "text");
}

[HttpGet]
public ActionResult Index()
{
    var model = new ShopsViewModel();
    return View(model);
}
[HttpPost]
public ActionResult Index(int RowsPerPage)
{
    var model = new ShopsViewModel();
    TryUpdateModel(model);
    return View(model);
}

Die Ansicht verwendet JSON aktualisieren von Daten in das raster, so dass es ausgelagert werden kann mit der Technik Malcolm Sheridan gebloggt hier. Ich habe geschnippelt code für die Kürze.

    <script type="text/javascript">
    $(function () {
        //fire JSON request to initially fill grid
        $.getJSON("/Shops/ShopsPager", null, function (d) {
            $("#grid").append(d.Data);

            $("#DataTable tfoot a").live("click", function (event) {
                event.preventDefault();
                OnPageClick($(this).text() );
            });
            $("#tLinks a").live("click", function (event) {
                event.preventDefault();
                OnPageClick($(this).text() );
            });
        });
    });
</script>
@Html.BeginForm();
    //this is the DDL that when changed, I want the view to refresh using the new value
    <div class="rlinks" style="float:right;">Display&nbsp;
         @Html.DropDownList("RowsPerPage", ViewBag.PageList as SelectList, 
           new{onchange= "this.form.submit();"})&nbsp;Items per page
    </div>
    <div id="grid" class="gridWrapper">
        <!-- the grid get inserted here by the JSON callback
    </div>

So was passiert, ist die Seite geladen-und das JSON-Aufruf fetchs die WebGrid mit der Anzahl der Zeilen, die derzeit angegebenen Modell.RowsPerPage Eigenschaft. Ändern von sagen wir 25 bis 50 submit() feuert und die Index () - POST-action aufgerufen wird. Der parameter korrekt ist und TryUpdateModel() korrekt aktualisiert den Wert RowsPerPage. Die Aktion gibt die Standard-Ansicht mit dem aktualisierten Modell, aber die Ansicht nicht aktualisiert, es führt nicht die JSON-Aufruf. Da bin ich mir nicht wirklich sicher, wie das routing und AJAX arbeitet zusammen das ist wahrscheinlich etwas einfaches.

InformationsquelleAutor StuTheDog | 2011-02-22

Schreibe einen Kommentar