Url.Action не ударяя по методу контроллера - PullRequest
0 голосов
/ 22 мая 2018

У меня есть таблица, содержащая ссылки на метод в контроллере.Таблица находится в форме с кнопкой отправки.

Ниже мое представление:

    @using (Html.BeginForm("SaveClient", "Client", FormMethod.Post))
{
    @Html.AntiForgeryToken()
    string language = ViewBag.Language;
            <div class="table-wrapper">
                <table width="100%">
                    <thead>
                        <tr>
                            <th>
                                @Html.DisplayNameFor(model => model.Client.ClientCode)
                            </th>
                            <th>
                                @Html.DisplayNameFor(model => model.Client.Name)
                            </th>
                            <th>
                                @Html.DisplayNameFor(model => model.Client.Surname)
                            </th>
                            <th>
                                @Html.DisplayNameFor(model => model.Client.Email)
                            </th>
                            <th>
                                @Html.DisplayNameFor(model => model.Client.ContactNumber)
                            </th>
                        </tr>
                    </thead>
                    <tbody>
                    @foreach (var item in Model.ClientMatches)
                    {
                        <tr>
                            <td>
                                @Html.DisplayFor(modelItem => item.ClientCode)
                            </td>
                            <td>
                                @Html.DisplayFor(modelItem => item.Name)
                            </td>
                            <td>
                                @Html.DisplayFor(modelItem => item.Surname)
                            </td>
                            <td>
                                @Html.DisplayFor(modelItem => item.Email)
                            </td>
                            <td>
                                @Html.DisplayFor(modelItem => item.ContactNumber)
                            </td>
                            <td>
                                <button onclick="location.href='@Url.Action("ShowClient", "Client", new { id=item.ClientCode})'">
                                    <i class="icon-arrow-right"></i>
                                </button>
                            </td>
                        </tr>
                    }
                    </tbody>
                </table>
            </div>
            @Html.HiddenFor(m => m.Client.Surname, Model.Client.Surname)
            @Html.HiddenFor(m => m.Client.Name, Model.Client.Name)
            @Html.HiddenFor(m => m.Client.ContactNumber, Model.Client.ContactNumber)
            @Html.HiddenFor(m => m.Client.Email, Model.Client.Email)
            @Html.HiddenFor(m => m.Client.Comments, Model.Client.Comments)

            <div class="mdl-card__actions centered">
                <button>
                    Create New
                </button>
            </div>
}

Мой метод ShowClient в ClientController:

 public ActionResult ShowClient(string clientCode)
    {
        if (clientCode == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        *some other actions*
    }

Когда я нажимаюна кнопке Создать новый это работает правильно.Но когда я нажимаю на Url.Action в таблице, мой метод ShowClient не срабатывает.Любая идея, что я могу делать неправильно, пожалуйста?Спасибо

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Просто используйте @Html.ActionLink():

@Html.ActionLink("ShowClient", "ShowClient", "Client", new { id=item.ClientCode }, new { @class = "btn btn-primary btn-sm" })

для более сложных типов, например, для добавления пользовательских изображений или значков, вы можете использовать тег <a> или для вашего примера , вы можете использовать Font Awesome, значки направления .

Пример DotNetFiddle

0 голосов
/ 22 мая 2018

Вам нужно использовать тег привязки вместо кнопки,

На самом деле у вас есть кнопка внутри формы, поэтому, когда вы нажимаете на кнопку, она отправляет форму и ваше действие по нажатию не будет выполняться,

       <a href="@Url.Action("ShowClient", "Client", new { clientCode=item.ClientCode})">
               <i class="icon-arrow-right"></i>
       </a>

и параметр строки запроса должен быть clientCode вместо id, поскольку у вас есть имя параметра с clientCode в методе действия

Еще одно предложение: Вам необходимо удалитьформы, потому что здесь вы не отправляете ничего, цель вашего представления - просто показать записи и перейти к перкулярному ClientCode,

и добавить ссылку для создания с помощью якоря

...