Как я могу назначить уникальные теги привязки для каждой строки, чтобы вернуться к этой строке после перезагрузки страницы в MVC? - PullRequest
1 голос
/ 13 июня 2019

У меня есть представление, которое содержит таблицу элементов. В каждой строке таблицы у вас есть возможность нажать на ссылку, чтобы отредактировать элемент, который приведет вас на другую страницу. Я пытаюсь сделать так, чтобы после того, как вы закончили редактирование элемента и сохранили свои изменения, он вернул вас к исходному виду, но в том же месте.

Так, например, если у вас было 300 строк в этой таблице, и вы работали со строкой 247. Я нажимаю «Правка», делаю некоторые изменения, и когда я сохраняюсь, я хочу вернуться к строке 247. Вместо этого я м вернул в начало страницы после сохранения. Я видел кое-что для jquery, но разве нет чего-то простого, что можно сделать в бритве с тегами привязки?

Мой код выглядит так:

View

Index.cshtml

...
...
...
<table>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.AID)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Comment)
        </th>
        <th></th>
    </tr>
    @foreach (var item in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.AID)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Comment)
            </td>
            <td colspan="5" align="right">
                <button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("Edit", new {id = item.AID })'">Action Event</button>
            </td>
        </tr>
    }
</table>

Контроллер

DatabaseController.cs

    public ActionResult Index()
    {
        return View(db.ActionableEvents.ToList());
    }        

    public ActionResult Edit(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        ActionableEvents actionableEvents = db.ActionableEvents.Find(id);
        if (actionableEvents == null)
        {
            return HttpNotFound();
        }
        return View(actionableEvents);
    }


    [HttpPost]
    public ActionResult Edit([Bind(Include = "AID,Comment")] ActionableEvents actionableEvents)
    {
        if (ModelState.IsValid)
        {
            db.Entry(actionableEvents).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(actionableEvents);
    }

В идеале было бы неплохо в моем HttpPost для Edit сделать что-то вроде:

return RedirectToAction("Index",idtag);

где idtag может быть значением маршрута, которое загружает страницу в определенный тег привязки. Что-то с эффектом "https://www.mywebsite.com/Home/Index#247".

Вопрос в том, как я могу добавить значение model.AID к тегу привязки (или, может быть, просто сделать что-то в моем теге) в цикле for, а затем сослаться на это в контроллере?

1 Ответ

1 голос
/ 13 июня 2019

Добавить атрибут id, соответствующий идентификатору элемента, в каждую строку:

@foreach (var item in Model)
    {
        <tr id="@item.AID"> @* assuming AID is the item id (e.g. 247)*@
            <td>
                @Html.DisplayFor(modelItem => item.AID)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Comment)
            </td>
            <td colspan="5" align="right">
                <button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("Edit", new {id = item.AID })'">Action Event</button>
            </td>
        </tr>
    }

Затем в вашем контроллере установите привязку к идентификатору строки html, который должен совпадать с идентификатором элемента:

return Redirect(Url.Action("Index") + "#" + idtag); // assuming idtag is the item id (e.g. 247)

Якорь idtag должен соответствовать атрибуту id строки таблицы (tr), чтобы страница переходила на строку.

...