在 ASP.NET MVC 中使用 CommandArgument 按钮创建自己的表
-
08-06-2019 - |
题
我正在尝试实现这样的事情:
<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 或使用标准超链接。如果您使用输入选项,那么您将需要包装在表单元素中。表单操作应指向控制器操作。
其他提示
您不能以简单的方式在 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 中的更新操作,并以给定的 portName 作为参数。在这两种情况下,您都需要在 IpController 中执行此操作:
public ActionResult Update(string portName) {
// ...
}
希望这可以帮助。
我认为你必须将你的块包含在表单标签和 runat=server 中。
FWIW,
我认为这段文字缺少一个等号:
CommandArgument="<% ip.PortName %>"
应该
CommandArgument="<%= ip.PortName %>"
不隶属于 StackOverflow