Передайте FormAction в модели с фьючерсами MVC

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

Мой взгляд в настоящее время выглядит так:

@model Models.Forms.ContactPersonForm
@{
    Layout = null;
}
<div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
    <h4 class="modal-title">Edit contact person</h4>
</div>
@using (Html.BeginForm<ProductsController>(x => x.EditContactPerson(null), FormMethod.Post))
{
    <div class="modal-body">
        @Html.EditorForModel()
    </div>
    <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">
            <span class="fa fa-times" area-hidden="true"></span> Close
        </button>
        <button type="submit" class="btn btn-primary">
            <span class="fa fa-floppy-o" area-hidden="true"></span> Save
        </button>
    </div>
}

Представление выше работает отлично. Но я хочу повторно использовать его для другого контроллера, который также наследует тот же базовый контроллер (и отправляет сообщения в EditContactPerson действие). Поэтому я хочу указать в модели, на какой контроллер отправлять сообщения. Я знаю, что могу использовать перегрузку строки как таковую:

@Html.BeginForm("EditContactPerson", "Products", FormMethod.Post)

или же

@Html.BeginForm(Model.Action, Model.Controller, FormMethod.Post)

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

@Html.BeginForm<ProductsController>(x => x.EditContactPerson(null), FormMethod.Post)

Есть ли способ, которым я могу использовать модель для визуализации формы, используя выражение из модели?

Что-то похожее на:

@Html.BeginForm<Model.ControllerType>(Model.ActionExpression, FormMethod.Post)

1 ответ

Как насчет чего-то такого:

@model Models.Forms.ContactPersonForm
@{
    Layout = null;
}
<div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
    <h4 class="modal-title">Edit contact person</h4>
</div>
@if (Model.XYZ == "...")
{
    using (Html.BeginForm<ProductsController>(x => x.FirstAction(null), FormMethod.Post))
    {
        Html.RenderPartial("FormContentPartialView");
    }
}
else
{
    using (Html.BeginForm<ProductsController>(x => x.SecondAction(null), FormMethod.Post))
    {
        Html.RenderPartial("FormContentPartialView");
    }
}
Другие вопросы по тегам