在ASP.NET MVC中使用CommandArgument按钮创建自己的表

时间:2020-03-05 18:40:54  来源:igfitidea点击:

我正在尝试实现这样的事情:

<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>

按钮的CommandArgument属性是我的代码抱怨无法解析符号ip的地方。有什么办法可以做我想做的事吗?

解决方案

回答

我们不想在ASP.NET MVC中使用Webforms按钮。 MVC是一种完全不同的工作方式,我们不再需要WebForms抽象。

我们有2个不同的选项,我们可以用输入标签替换asp:Button,也可以使用标准的超链接。如果使用input选项,则需要包装一个form元素。表单动作应指向控制器动作。

回答

我认为我们必须将代码块封装在Form标签中,然后在runat = server中。

回答

我们不能以简单的方式在ASP.NET MVC中使用Webform控件,因为它们依赖于MVC中剥离的内容。取而代之的是,我们可以通过两种方式添加按钮,两种方式都可以通过在ViewPage上使用HtmlHelper来实现:

我们可以在表单中添加按钮,如果每个按钮都有一个表单,则可以在控制器中轻松地对其进行处理:

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

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

<% } %>

BeginForm()将默认使用与创建视图相同的控制器和操作。另一种方法是添加链接,这更适合我们遍历列表的示例。例如,假设我们有IpController

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

链接将转到IpController中以给定portName作为参数的Update操作。在这两种情况下,我们都需要在IpController中执行以下操作:

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

希望这可以帮助。

回答

FWIW,

我认为这段文字缺少等号:

CommandArgument =" <%ip.PortName%>"

应该

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