У меня есть несколько сущностей, в которых реализован интерфейс IEntity
(в реальном мире у меня есть 10 сущностей).
public interface IEntity
{
short Id { get; set; }
string Name { get; set; }
}
public partial class Part: IEntity { }
public partial class Localization : IEntity { }
Я отображаю список каждой сущности (в таблице), и яхочу отобразить модальную форму для редактирования имени сущностей, без дублирования кода.
Поэтому у меня есть частичное представление для отображения списка и кнопка для запуска модальной формы:
@model IEnumerable<IEntity>
@foreach (IEntity item in Model)
{
<tr>
<td>
@Html.DisplayFor(m => item.Name)
</td>
<td>
<button data-id="@item.Id" onclick="editEntity(this)">
<i class="fa fa-edit text-primary"></i>
</button>
</td>
</tr>
}
//Here the modal container part
<div class="modal fade" id="editModal" aria-hidden="true">
<div id="editModalContainer">
</div>
</div>
Теперь, модальная форма также является частичным представлением (здесь упрощенно):
@using (Html.BeginForm())
{
@Html.ValidationMessageFor(m => m.Name, "", new { @class = "text-danger" })
@Html.TextBoxFor(m => m.Name)
<button type="submit" id="submitEdit" class="btn btn-primary">Enregistrer</button>
}
В настоящее время я рендерим модал через ajax следующим образом:
function editEntity(clickedEntity) {
//I need the type of entity to get right modal title and so on
var type = $(clickedEntity).closest("div").attr('data-entityType');
var entityId = $(clickedEntity).attr('data-id');
$.ajax({
type: "GET",
url: "/Defaults/GetEntityModal",
data: { id: entityId, entityType: type },
success: function (response) {
$("#editModalContainer").html(response);
$("#editModal").modal('show');
},
failure: function (response) {
alert("failure");
},
error: function (response) {
alert("error");
}
});
иметод контроллера:
[HttpGet]
public ActionResult GetEntityModal(EditEntityModalView entityModel)
{
IEntity entity = _entitiesService.GetEntity(entityModel.EntityType, entityModel.Id);
entityModel.Name = entity.Name;
return PartialView("_ModifyEntityModal", entityModel);
}
Но на следующем этапе я столкнулся с множеством проблем при проверке модальной модели на стороне сервера.
Итак, мой вопрос:в этом случае это правильный способ визуализации модальных или мне нужно сделать форму для каждой записи в таблице?