Frage

Ich verwende mvccontrib hauptsächlich für die Aspekte von Paging, Sortier und Filterung. Mein Raster enthält alle Adressen in unserer Mailinglistenanmeldung (nur Backend). Der Benutzer kann Listenmitglieder löschen, aktivieren und inaktivieren, sodass in jeder Zeile Aktionslinks für diese Optionen vorhanden sind. Mit JQuery erfasse ich, dass das Klicken und Ausführen anderer Dinge wie die Anzeigebenachrichtigung der Aktion abgeschlossen ist.

Aus diesem Grund ist das Problem, das ich habe, wie ich das Netz auffrische, nachdem ich diese Aktionen ausgeführt habe, damit der Benutzer die Ergebnisse sehen kann. Bei einem Löschen kann ich die Zeile verbergen. Was kann ich tun, wenn eine Person eine E -Mail aktiviert/deaktiviert? Verwenden Sie einfach JQuery, um den Wert in der Tabelle zu aktualisieren, der den Status anzeigt?

// Activate the email address
$(".ActivateLink").click(function() {
    var id = $(this).attr("href");
    var i = id.indexOf("#");
    id = id.substring(i + 1);
    $.ajaxSetup({ 'async': false });
    $.post("/List/Activate", { "id": id }, function(data) {
        $(".message").text(data.message).addClass("notice");
    }, "json");
    return false;
});

Meine Controller -Aktion:

    //
    // POST: /List/Activate
    [HttpPost]
    public ActionResult Activate(int id)
    {
        string message = String.Empty;
        db.ActivateEventEmail(id, ref message);
        return Json(new { message = message });
    }

Meine Sicht:

<%= Html.Grid(Model.EmailAddressList).Columns(column => {
    column.For("ImageActions").Named("").Sortable(false);
    column.For(a => (a.Email.Length > 30) ? String.Format("{0}...", a.Email.Substring(0, 30)) : a.Email).Encode(true).SortColumnName("Email").Named("Email Address");
    column.For(a => (a.ContactName.Length > 30) ? String.Format("{0}...", a.ContactName.Substring(0, 30)) : a.ContactName).Encode(true).SortColumnName("ContactName").Named("Contact Name");
    column.For(a => a.SignupDate).Named("Signup Date").Format("{0:d}").Attributes(@style => "text-align: right;");
    column.For(a => a.AccountStatus ? "Yes" : "No").SortColumnName("AccountStatus").Named("Active").Attributes(@style => "text-align: center;");
}).Sort(Model.GridSortOptions)
    .Attributes(@class => "table-list", style => "width: 100%;").RowAttributes(c => new MvcContrib.Hash(@class => "gridrow"))
%>
War es hilfreich?

Lösung

Okay, das habe ich herausgefunden.

Zunächst musste ich nur einen Anruf zu einer Funktion hinzufügen, die ich später im Code entlang habe.

// Activate the email address
$(".ActivateLink").live('click', function() {
    var id = $(this).attr("href");
    var i = id.indexOf("#");
    id = id.substring(i + 1);
    $.ajaxSetup({ 'async': false });
    $.post("/List/Activate", { "id": id }, function(data) {
        refreshTable();
        $(".message").text(data.message).addClass("notice");
    }, "json");
    return false;
});

Die obige Controller -Aktion, ich berühre nicht und die Ansicht, die ich oben hatte, berühre ich nicht. Die neue JavaScript -Funktion, die ich erstelle, lautet wie folgt:

    function refreshTable() {
        $.ajaxSetup({
            async: false,
            cache: false
        });
        $.get('<%= Url.Action("Index", "List", new { filterText = Model.FilterText, filterActive = Model.FilterActive, filterGroup = Model.FilterGroup }) %>',
        function(response) {
            $(".table-list").replaceWith(response)
        });
    };

Stellen Sie sicher, dass Sie das haben cache: false da drin. IE zieht gerne Daten aus Cache und macht wirklich ein Durcheinander der Dinge.

Bei meiner Indexaktion habe ich mich geändert return View(emailListGrid); zu

        if (Request.IsAjaxRequest())
            return PartialView("EmailMaint", emailListGrid);
        else
            return View(emailListGrid);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top