在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%>"