ASP.Net MVC 2 - повторное использование Controller / View с указанием возврата Action и Controller в параметрах - PullRequest
2 голосов
/ 08 января 2011

Проблема:

В моем приложении я предоставил пользователю экран выбора для чего-то в нескольких местах (то есть один и тот же экран выбора должен использоваться в нескольких действиях).

Решение:

Я пришел к следующему решению: передать действие return и контроллер в действие, которое обрабатывает выбор сущности .

Пример:

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

public class SomeEntityController : Controller
{
    /* ... */

    public ViewResult Select(string returnAction, string returnController)
    {
        var selectableEntities = ...;
        return View(
            new SelectionViewModel<SomeEntity>
            {
                Entities = selectableEntities,
                ReturnAction = returnAction,
                ReturnController = returnController,
            });
    }
}

В представлении для этого действия (Views / SomeEntity / Select.aspx) я поместил что-то вроде этого:

<table>
    <tr>
        <th>Select</th>
        <th>SomeProperty<th>
    </tr>
    <% foreach (var entity in Model.Entities) { %>
        <tr>
            <td>
                <%: Html.ActionLink("Select", Model.returnAction, Model.returnController, new { entityId = entity.id }) %>
            </td>
            <td><%: entity.SomeProperty %></td>
        </tr>
    <% } %>
</table>

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

public class OtherController : Controller
{
    public ActionResult SelectSomeEntity()
    {
        return RedirectoToAction("Select", "SomeEntity", new { returnAction = "ActionThatNeedsAnEntity", returnController = "Other" });
    }

    public ActionResult ActionThatNeedsAnEntity(int entityId)
    {
        // here I can use the selected entity
    }
}

Последний фрагмент кода является лишь примером того, как использовать действие выбора SomeEntity. Вместо действия SelectSomeEntity может быть более сложное действие, которое выполняет некоторые проверки, чтобы увидеть, выбран ли уже entityId (например, сохранен ли в сеансе), и затем решает, вызывать ли SomeEntity/Select или нет

Вопрос:

Вышеописанное работает нормально, но я новичок в ASP.Net MVC 2, поэтому я не знаю, есть ли другое (стандартное) решение для этого.

Является ли этот подход правильным / аккуратным? Вы решили эту ситуацию по-другому?

1 Ответ

0 голосов
/ 22 августа 2011

Я мог бы неправильно понять вашу проблему, но я думаю, что частичные представления будут "стандартным" решением, которое вы ищете.

Частичные представления - это просто небольшие представления, которые можно вставлять в другие представления. Такие вещи, как формы ввода или отображения данных, могут быть частично отображены и добавлены в обычный вид. Они значительно упрощают код.

Их просто сделать. Когда вы хотите сделать обычный вид, просто установите флажок «частичный вид» в окне (т.е. после щелчка правой кнопкой мыши в обозревателе решений и выбора опции «добавить вид»). Затем вы можете добавить это в любой вид, используя <%: Html.Partial("myPartialView") %>. Вы также можете легко передать модель в частичное представление, выполнив <%: Html.Partial("myPartialView", Model) %>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...