asp. net обработчик события щелчка по таблице вызывается дважды - PullRequest
0 голосов
/ 30 мая 2020

У меня есть таблица с некоторым столбцом в asp. net mvc основном проекте.

Мой файл представления выглядит так

    <h1>Items</h1>
<div class="panel-body">
    <table class="table table-bordered table-responsive table-hover">
        <thead>
            <tr>
                <th>Id</th>
                <th>Title</th>

                <th>Rating</th>
                <th></th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model.Items)
            {
                <tr onclick="location.href='@(Url.Action("ShowItemDetails", "Item", new {Id = item.FilmId}))'">
                    <td>@item.Id</td>
                    <td>@item.Title</td>

                    <td>@item.Rating</td>
                    <td>@Html.ActionLink("Edit", "Edit", "Show", new { id = item.Id })  | @Html.ActionLink("Rate this", "RateItem", new { id = item.Id }) </td>

                </tr>
            }
        </tbody>
    </table>
</div>

Проблема в том, что когда я щелкаю строку, метод контроллера ShowItemDetails вызывается дважды (!). Из приведенного выше кода я не могу понять, почему это происходит. Кроме того, щелчок по Edit или Rate вызывает сначала ShowItemDetails, а затем сразу же Edit или RateItem в контроллере. Есть предложения, как это можно решить?

Ответы [ 2 ]

0 голосов
/ 31 мая 2020

Проблема, похоже, вызвана чем-то, что я считал неуместным из-за того, что нулевое изображение вызывало метод дважды. Установка на это решает. Необходимо добавить код для проверки Model.Image! = Null Очень странно !!

0 голосов
/ 30 мая 2020

Щелчок по Edit или Rate вызывает сначала ShowItemDetails, а затем сразу же Edit или RateItem, потому что Edit находится под строкой таблицы и на tablerow, вы вызвали действие showitemdetails. Поэтому, когда вы нажимаете на td, оно запускает первое действие строки затем td action. поэтому он вызывается дважды.

Надеюсь, вы хотите показать детали и отредактировать параметры с данными таблицы, а Edit - это имя контроллера.

Настройте код таблицы, как показано ниже :

<tbody>
@foreach (var item in Model.Items)
  {
    <tr>
        <td>@Html.ActionLink("Show Details","ShowItemDetails","Item",new {Id = item.FilmId})</td>
        <td>@item.Id</td>
        <td>@item.Title</td>    
        <td>@item.Rating</td>
        <td>@Html.ActionLink("Edit", "Edit", "Show", new { id = item.Id })  | @Html.ActionLink("Rate this", "RateItem", new { id = item.Id }) </td>
    </tr>
  }
</tbody>
...