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

时间:2008-08-19 21:10:48

标签: asp.net-mvc

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

<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的地方。有没有办法做我想做的事情?

4 个答案:

答案 0 :(得分:3)

您不希望在ASP.NET MVC中使用Webforms按钮。 MVC是一种完全不同的工作方式,您不再拥有WebForms抽象。

您有2个不同的选项,您可以使用输入标记替换您的asp:Button或使用标准超链接。如果使用输入选项,则需要包装表单元素。表单操作应指向Controller操作。

答案 1 :(得分:1)

您不能以微不足道的方式在ASP.NET MVC中使用webform控件,因为它们依赖于MVC中剥离的内容。相反,您可以通过两种方式添加按钮,均使用HtmlHelper上的ViewPage

您可以在表单中添加一个按钮,如果每个按钮都有一个表单,则可以轻松地在控制器中进行操作:

<% 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中的Update操作,并将给定的portName作为参数。在这两种情况下,您都需要在IpController中执行此操作:

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

希望这有帮助。

答案 2 :(得分:0)

我认为您必须将您的块放在Form标签和runat = server。

答案 3 :(得分:0)

FWIW,

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

CommandArgument =“&lt;%ip.PortName%&gt;”

应该是

CommandArgument =“&lt;%= ip.PortName%&gt;”