ASP.Net MVC 2: reutilización del controlador / vista indicando la acción de retorno y el controlador en los parámetros

Problema:

En mi aplicación le he proporcionado al usuario una pantalla de selección para algo en varios lugares (es decir, la misma pantalla de selección debe usarse en varias acciones).

Solución:

Se me ocurrió la siguiente solución: pasar la acción de retorno y el controlador a la acción que maneja la selección de la entidad.

Ejemplo:

Suponga que hay varios lugares en la aplicación donde el usuario tiene que seleccionar una instancia de SomeEntity, así que agregué la siguiente acción a ese controlador de entidad:

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

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

En la vista de esa acción (Views / SomeEntity / Select.aspx) pongo algo como esto:

<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>

Entonces, si necesito que el usuario seleccione un SomeEntity en otro controlador puedo hacer esto:

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
    }
}

El último fragmento de código es solo un ejemplo de cómo usar el SomeEntity acción de selección. En vez de SelectSomeEntity acción, podría haber una acción más compleja que realice algunas comprobaciones para ver si una entityId ya está seleccionado (por ejemplo, almacenado en la sesión) y luego decide si llamar SomeEntity/Select o no

Pregunta:

Lo anterior funciona bien, pero soy nuevo en ASP.Net MVC 2, así que no sé si hay otra solución (estándar) para esto.

¿Es este enfoque correcto / ordenado? ¿Ha resuelto esta misma situación de manera diferente?

preguntado el 08 de enero de 11 a las 20:01

1 Respuestas

Podría estar malinterpretando su problema, pero creo que las vistas parciales serían la solución "estándar" que está buscando.

Las vistas parciales son solo eso, pequeñas vistas que se pueden insertar en otras vistas. Cosas como formularios de entrada o pantallas de datos se pueden poner en una vista parcial y agregar a la vista normal. Simplifican enormemente el código.

Son simples de hacer. Cuando vaya a hacer una vista normal, simplemente marque la casilla "vista parcial" en la ventana (es decir, después de hacer clic con el botón derecho en el explorador de soluciones y seleccionar la opción "agregar vista"). A continuación, puede mostrar esto en cualquier vista completa utilizando <%: Html.Partial("myPartialView") %>. También puede pasar fácilmente un modelo a la vista parcial haciendo <%: Html.Partial("myPartialView", Model) %>

Respondido 22 ago 11, 19:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.