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

StackOverflow https://stackoverflow.com/questions/16964

  •  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 свойство - это то, где мой код жалуется на невозможность разрешить symbol ip.Есть ли какой-нибудь способ сделать то, что я пытаюсь сделать?­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Это было полезно?

Решение

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

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

Другие советы

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

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

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

FWIW,

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

Командный аргумент="<% ip.Имя порта %>"

Должно быть

Командный аргумент="<%= ip.Имя порта %>"

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top