Frage

In einer ASP.NET MVC-Anwendung, ich mache Logik für Admin zu akzeptieren oder neue Mitglieder ablehnen. Ich zeige eine Liste der Mitglieder und zwei Tasten Annehmen und Abweisen, wie folgt aus:

<% foreach (var mm in (ViewData["pendingmembers"] as List<MyMember>)) %>
<% { %>
   <tr><td>Username:<%=mm.UserName %></td><td>
   <tr><td>Firstname:<%=mm.FirstName %></td><td>
   ...etc...
   <tr>
      <td>
      <% using (Html.BeginForm("AcceptPendingUser", "Admin"))
      { %>
          <input type="submit" value="Accept" />
      <% } %>
      </td>
      <td>
      <% using (Html.BeginForm("RejectPendingUser", "Admin"))
      { %>
        <input type="submit" value="Reject" />
      <% } %>
      </td>
    </tr>
<% } %>
So

, die Liste der anstehenden Datenelement in einer Liste von MyMember-Objekten. Jedes Objekt MyMember wird ausgedrucktes Element und zwei Tasten sind Setup für den Administrator akzeptieren oder ein Mitglied anhängigen ablehnen.

Dann in der Steuerung ich den Umgang mit diesen beiden Eingabefelder / forms bin zu trennen, wie folgt aus:

public ActionResult AcceptPendingUser()
{
   // TODO: Add code to save user into DB and send welcome email.
   return RedirectToAction("Index");
}

public ActionResult RejectPendingUser()
{
   // TODO: Add code to remove user from PendingUsers list and send rejection email.
   return RedirectToAction("Index");
}

Ich möchte das Objekt direkt erhalten neben der Taste der Benutzer gedrückt. Wie kann ich das MyMember Objekt aus der Sicht auf den Controller senden? Oder wie sende ich vielleicht einen numerischen Index mit Taste drücken? Vielleicht mit einem versteckten Feld?

War es hilfreich?

Lösung

Die einfachste Möglichkeit wäre wahrscheinlich eine versteckte eingegeben werden:

<input type="hidden" value="<%=mm.Key%>" name="key" id="key" />

(Name entsprechend, in jeder Form)

Die beiden Controller würde dann ein Argument „Schlüssel“ genannt (umbenennen entsprechen). Wenn Sie das Objekt von mehreren Eingängen analysieren wollen, müssen Sie eine ModelBinder benötigen. Natürlich, anstatt 2 * n Formen, können Sie entweder Abfrage-String-basierte URLs betrachten, oder so etwas wie jQuery (oder einem anderen Skript Helfer) verwenden, um die Daten zu übermitteln, ohne die Formulare zu benötigen (wenn das Skript verfügbar ist).

Andere Tipps

Statt eine HTML-Schaltfläche betrachtet ein Action der Verwendung mit und baut die ID des Elements enthalten ist, genehmigt. Eine weitere Alternative wäre eine Checkbox zu haben (dessen Wert die ID des Mitglieds genehmigt wird), dass der Administrator wählen kann für jedes Mitglied für ablehnen und jeweils ein genehmigen genehmigt und ein ähnliches werden / Abweisen Tasten für die gesamte Form.

Answering zu mir und anderen mvc Neulingen:

Ich habe es endlich mit diesem Code arbeiten:

VIEW:

 <%=Html.ActionLink(
     "Jump", 
     "Jump", 
     new { name=(ViewData["Person"] as Person).Name, 
     person=ViewData["Person"]}, 
     null) %>

REGLER:

public ActionResult Index()
{
     ViewData["Title"] = "Home Page";
     ViewData["Message"] = "Welcome to ASP.NET MVC!";
     Person p = new Person();
     p.Name = "Barrack";
     p.Age = 35;
     ViewData["Person"] = p;
     return View();
}

public ActionResult Jump(string name, Person person)
{
    return View();
}

Debuggen der Anwendung in der Jump-Methode gibt mir schön "Barrack" -string für den Parameter name, aber Person Parameter in null.

ich auch verstehen, was die Art commen zu erklären versucht. Es ist leicht, einfache Datentypen wie Strings und ints senden an die Steuerung, aber komplexe Typen wie meine Person-Objekt muss etwas anderes

Im Grunde ein int vorbei ist genug für mich. Der schwierigste Teil war hier den richtigen Weg, herauszufinden, Action einzurichten.

Cheers, Pom

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top