Создание собственной таблицы с помощью кнопок CommandArgument в ASP.NET MVC

Я пытаюсь реализовать что-то вроде этого:

<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. Есть ли способ сделать то, что я пытаюсь сделать?

19.08.2008 21:10:47
4 ОТВЕТА
РЕШЕНИЕ

Вы не хотите использовать кнопку Webforms в ASP.NET MVC. MVC - это совершенно другой способ работы, и у вас больше нет абстракции WebForms.

У вас есть 2 варианта, которые вы можете либо заменить своим asp: Button на тег ввода, либо использовать вместо него стандартную гиперссылку. Если вы используете опцию ввода, вам нужно будет обернуть элемент формы. Действие формы должно указывать на действие контроллера.

3
19.08.2008 21:43:38

Я думаю, что вы должны заключить свой блок в теги Form и runat = server.

0
27.02.2009 11:54:06

Вы не можете использовать элементы управления веб-формы в 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) {
    // ...
}

Надеюсь это поможет.

1
27.02.2009 12:30:12

FWIW,

Я думаю, что в этом тексте отсутствует знак равенства:

CommandArgument = "<% ip.PortName%>"

Должно быть

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

0
29.05.2009 19:19:39