Erstellen Sie Ihre eigene Tabelle mit CommandArgument-Schaltflächen in ASP.NET MVC

StackOverflow https://stackoverflow.com/questions/16964

  •  08-06-2019
  •  | 
  •  

Frage

Ich versuche so etwas zu implementieren:

<div>
    <table>
        <thead>
            <tr>
                <td>Port name</td>
                <td>Current port version</td>
                <td>New port version</td>
                <td>Update</td>
            </tr>
        </thead>
        <% foreach (var ip in Ports) { %>
            <tr>
                <td>
                    <%= ip.PortName %>
                </td>
                <td>
                    <%= ip.CurrentVersion %>
                </td>
                <td>
                    <%= ip.NewVersion %>
                </td>
                <td>
                    <asp:Button ID="btnUpdate" runat="server" Text="Update" CommandArgument="<% ip.PortName %>" />
                </td>
            </tr>
            <% } %>
    </table>
</div>

Die Knöpfe CommandArgument In der Eigenschaft beschwert sich mein Code darüber, dass das Symbol nicht aufgelöst werden kann ip.Gibt es eine Möglichkeit, das zu tun, was ich versuche?­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

War es hilfreich?

Lösung

Sie möchten in ASP.NET MVC keine Webforms-Schaltfläche verwenden.MVC ist eine völlig andere Arbeitsweise und Sie verfügen nicht mehr über die WebForms-Abstraktion.

Sie haben zwei verschiedene Möglichkeiten: Sie können entweder Ihren asp:Button durch ein Eingabe-Tag ersetzen oder stattdessen einen Standard-Hyperlink verwenden.Wenn Sie die Eingabeoption verwenden, müssen Sie ein Formularelement einschließen.Die Formularaktion sollte auf eine Controller-Aktion verweisen.

Andere Tipps

Sie können Webform-Steuerelemente in ASP.NET MVC nicht auf triviale Weise verwenden, da sie auf Dingen basieren, die in MVC entfernt wurden.Stattdessen können Sie eine Schaltfläche auf zwei Arten hinzufügen, beide mit der HtmlHelper auf der ViewPage:

Sie können einem Formular eine Schaltfläche hinzufügen, was in einem Controller einfach zu handhaben ist, wenn Sie für jede einzelne Schaltfläche ein Formular haben:

<% using(Html.BeginForm("Update", "Ip", new {portName = ip.PortName} )) { %>

    ....
    <input name="action" type="submit" value="Update">

<% } %>

BeginForm() verwendet standardmäßig denselben Controller und dieselbe Aktion, mit der die Ansicht erstellt wurde.Die andere Möglichkeit besteht darin, stattdessen einen Link hinzuzufügen, der besser zu Ihrem Beispiel des Durchlaufens einer Liste passt.Nehmen wir zum Beispiel an, Sie haben IpController

<%= Html.ActionLink("Update IP", "Update", "Ip", 
        new { 
            portName = ip.PortName 
        }) 
%>

Der Link führt zur Update-Aktion in IpController mit dem angegebenen PortNamen als Parameter.In beiden Fällen benötigen Sie diese Aktion in IpController:

public ActionResult Update(string portName) {
    // ...
}

Hoffe das hilft.

Ich denke, Sie müssen Ihren Block in Form-Tags und runat=server einschließen.

FWIW,

Ich glaube, in diesem Text fehlt ein Gleichheitszeichen:

CommandArgument="<% ip.PortName %>"

Sollte sein

CommandArgument="<%= ip.PortName %>"

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