tag route net mvc for data asp all asp.net-mvc user-controls ascx

route - Encapsulando controles de usuario en ASP.NET MVC



select asp-for asp-items (3)

Lo siento si esta es una pregunta básica: tengo problemas para realizar la transición mental a ASP.NET MVC desde el marco de la página.

En el marco de página, a menudo uso archivos ASCX para crear pequeños fragmentos encapsulados de funcionalidad que se incluyen en varios lugares de un sitio. Si estoy construyendo una página y necesito uno de estos controles, solo agrego una referencia y todo funciona.

Por lo que puedo decir, en MVC, el archivo ASCX es solo una vista parcial. ¿Esto significa que siempre que quiera agregar una de estas unidades de funcionalidad también tengo que agregar algún código al método de acción del controlador para asegurarme de que ViewData relevante esté disponible para ASCX?

Si este es el caso, parece un poco un paso atrás para mí. Significa, por ejemplo, que no podía simplemente ''soltar'' un control en una página maestra sin tener que agregar código a cada controlador cuyas vistas usan esa página maestra.

Sospecho que me estoy perdiendo algo, cualquier ayuda sería apreciada.

Gracias, - Chris


Por lo que puedo decir, en MVC, el archivo ASCX es solo una vista parcial. ¿Esto significa que siempre que quiera agregar una de estas unidades de funcionalidad también tengo que agregar algún código al método de acción del controlador para asegurarme de que ViewData relevante esté disponible para ASCX?

Sí.

Sin embargo, puede usar un método RenderAction en su vista en lugar de RenderPartial , y se RenderPartial toda su funcionalidad (incluidos los datos que se pasan a la RenderPartial ).

En otras palabras, esto creará un pequeño paquete que incorpora un método de controlador, datos de vista y una vista parcial, que se puede llamar con una línea de código desde su vista principal.


Puede renderizar una vista parcial y pasar un objeto modelo a.

<% Html.RenderPartial("MyPartial", ViewData["SomeObject"]);

En su archivo de vista parcial (.ascx), puede usar el objeto "Modelo" (suponiendo que haya heredado el objeto adecuado en su deceleración @ Control) para hacer lo que necesite con ese objeto.

Por supuesto, no puede pasar y modelar y simplemente tomar el texto de la vista parcial y colocarlo donde lo desee.

En su vista principal (archivo .aspx), deberá definir el objeto adecuado en ViewData que está pasando a la vista parcial.

Otro método que puedes hacer es usar:

<% Html.RenderAction("MyAction", "MyController", new { Parameter1="Value1"}) %>

Lo que hace el método anterior es llamar a una Acción de controlador, tomar su respuesta y colocarla donde llamó el método "RenderAction ()". Es el equivalente a ejecutar una solicitud contra una acción del controlador y leer la respuesta, excepto que coloca la respuesta en otro archivo.

Google "rendaction y renderpartial" para más información.


Su pregunta ya ha sido respondida, pero solo para completar, hay otra opción que a veces puede resultar atractiva.

¿Has visto cómo se enmascaran los "controles" en ASP.NET MVC? Son métodos del "HtmlHelper". Si quiere un cuadro de texto vinculado a "FirstName", por ejemplo, puede hacer:

<%= Html.Textbox("FirstName") %>

Y tienes cosas así para muchos controles estándar.

Lo que puedes hacer es crear tus propios métodos así. Para crear su propio método, debe crear un método de extensión en la clase HtmlHelper, como este:

public static class HtmlHelperExtensions { public static string Bold(this HtmlHelper html, string text) { return "<b>" + text + "</b>/n"; } }

Luego en su vista, después de abrir el espacio de nombres que contiene esta definición de clase, puede usarlo así:

<%= Html.Bold("This text will be in bold-face!") %>

Bueno, esto no es particularmente útil. Pero puedes hacer cosas muy interesantes. Uno que utilizo bastante a menudo es un método que toma una enumeración y crea una lista desplegable con los valores de esta enumeración (por ejemplo, enum Gender { Male, Female } , y en la vista algo como Gender: <%= Html.EnumDropDown(Model.Gender) %> ).

¡Buena suerte!