我正在尝试实现这样的事情:
<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
的地方。有没有办法做我想做的事情?
答案 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;”