Отображать одну и ту же модальную форму для разных сущностей БД - PullRequest
0 голосов
/ 10 октября 2018

У меня есть несколько сущностей, в которых реализован интерфейс 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);
}

Но на следующем этапе я столкнулся с множеством проблем при проверке модальной модели на стороне сервера.

Итак, мой вопрос:в этом случае это правильный способ визуализации модальных или мне нужно сделать форму для каждой записи в таблице?

1 Ответ

0 голосов
/ 11 октября 2018

Это правильный путь, но модальное представление должно сначала отображаться перед обновлением с помощью ajax:

<div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-hidden="true">
    <div id="editModalContainer">
        @{Html.RenderPartial("_ModifyEntityModal", Model.EditEntityModalView);}
    </div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...