#html #asp.net-mvc #standards
#HTML #asp.net-mvc #стандарты
Вопрос:
Я только что поймал себя на том, что делаю это:
<table>
<tr>
<th>Code</th>
<th>Enabled</th>
<th>Percentage</th>
<th>Amount</th>
<th>Start</th>
<th>End</th>
<th>Action</th>
</tr>
@foreach(var item in Model)
{
<tr>
<td>@Html.ActionLink(item.Code, "Edit", new { id = item.Id })</td>
<td>@item.Enabled ? "Yes" : "No"</td>
<td>@item.Percentage</td>
<td>@item.Amount</td>
<td>@item.StartDate</td>
<td>@item.EndDate</td>
<td>
@using (Html.BeginForm("Delete", "Discounts", new { id = item.Id }))
{
<input type="submit" value="Delete" />
}
</td>
</tr>
}
</table>
Причина, по которой я остановился, заключалась в том, что у меня есть форма в каждой строке, в качестве хорошей практики было бы лучше вместо этого обернуть всю таблицу в одну форму?
Я, вероятно, уже знаю ответ, но подумал, что проверю 🙂
Комментарии:
1. Нет причин не иметь другую форму для каждой строки, если каждая форма выполняет свою работу.
Ответ №1:
Я бы сказал, что это зависит от вашего конкретного сценария.
- Если вам нужно минимизировать размер страницы, вы можете выбрать одну форму. Однако тогда вам нужно будет использовать javascript для обновления некоторого (скрытого) поля перед отправкой формы.
- С другой стороны, ваш текущий подход работает, даже если пользователь отключил javascript
Основываясь на моих текущих знаниях о вашей ситуации, я бы, вероятно, выбрал то, что у вас есть сейчас, просто потому, что это красиво и чисто.
Ответ №2:
Я думаю, что ваш подход хорош и часто является лучшим способом. например, если вы писали приложение с системой голосования, подобной stackoverflow (пример выбран потому, что вы смотрите на такое приложение прямо сейчас), и вы хотели реализовать механизм голосования с помощью HttpPost
, тогда вы могли бы создать небольшой элемент управления с кнопками вверх и вниз в виде отдельных форм *. Таким образом, вы могли бы легко добавить любое количество таких «виджетов» на страницу, и содержащей странице не нужно было бы ничего знать о них (включая, присутствовали ли они вообще). Действительно, вы могли бы использовать ненавязчивый javascript для отправки формы и перезагрузки «виджета» голосования с помощью сбоя для перезагрузки страницы, если javascript был отключен, и все это могло бы выглядеть довольно красиво.
* ПРИМЕЧАНИЕ: Я не думаю, что в stackoverflow это делают именно так, имейте в виду!
Сбой без AJAX может быть таким:
[HttpPost]
[OutputCache(Location = OutputCacheLocation.None, NoStore = true)]
public ActionResult DoThing(whatever params you are passing in)
{
// Do stuff and then...
if (Request.IsAjaxRequest)
{
return View("_partialThingView", thingViewModel);
}
else
{
RedirectToAction("Index");
}
}
Комментарии:
1. 1 за упоминание Ajax-запросов и полезного фрагмента кода 🙂
Ответ №3:
Я думаю, что это лучший подход, если вы не хотите реализовать функцию массового удаления (ваш HTML-код говорит мне, что это не так).
Используя форму (с методом POST) для каждого элемента, вы убедитесь, что
- Вы удаляете только один элемент за раз
- Вы не удаляете элементы случайно, вызывая такой URL, как
http://[yoursite]/[yourapp]/[delete_method]/[item_id_to_delete]
.
Итак, придерживайтесь вашего текущего подхода. (мои 0,02 евро)