0

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

<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属性是我的代码抱怨无法解析 symbol 的地方ip。有什么办法可以做我想做的事吗?

4

4 回答 4

3

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

您有 2 个不同的选项,您可以使用输入标签替换您的 asp:Button 或使用标准超链接。如果您使用输入选项,那么您将需要包装在表单元素中。表单动作应该指向一个控制器动作。

于 2008-08-19T21:43:38.137 回答
1

您不能以简单的方式在 ASP.NET MVC 中使用 webform 控件,因为它们依赖于在 MVC 中剥离的东西。相反,您可以通过两种方式添加按钮,都使用HtmlHelperon 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) {
    // ...
}

希望这可以帮助。

于 2009-02-27T12:23:58.010 回答
0

我认为你必须将你的块放在表单标签 ans runat=server.xml 中。

于 2009-02-27T11:54:06.820 回答
0

FWIW,

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

CommandArgument="<% ip.PortName %>"

应该

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

于 2009-05-29T19:19:39.417 回答