Я пытаюсь реализовать что-то вроде этого:
<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
. Есть ли способ сделать то, что я пытаюсь сделать?
Вы не хотите использовать кнопку Webforms в ASP.NET MVC. MVC - это совершенно другой способ работы, и у вас больше нет абстракции WebForms.
У вас есть 2 варианта, которые вы можете либо заменить своим asp: Button на тег ввода, либо использовать вместо него стандартную гиперссылку. Если вы используете опцию ввода, вам нужно будет обернуть элемент формы. Действие формы должно указывать на действие контроллера.
Я думаю, что вы должны заключить свой блок в теги Form и runat = server.
Вы не можете использовать элементы управления веб-формы в ASP.NET MVC тривиальным способом, потому что они полагаются на вещи, которые удалены из 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 с указанным именем порта в качестве параметра. В обоих случаях вам понадобится это действие в IpController:
public ActionResult Update(string portName) {
// ...
}
Надеюсь это поможет.
FWIW,
Я думаю, что в этом тексте отсутствует знак равенства:
CommandArgument = "<% ip.PortName%>"
Должно быть
CommandArgument = "<% = ip.PortName%>"