ASP.Net MVC es un patrón que se utiliza para dividir la lógica de implementación de la aplicación en tres componentes, es decir, modelos, vistas y controladores.

Modelo: Es básicamente una entidad comercial que se utiliza para representar los datos de la aplicación. Controlador: la solicitud que envía el usuario siempre se dispersa a través del controlador y su responsabilidad es redirigir a la vista específica usando el método View (). Vista: es la capa de presentación de ASP.Net MVC.

Las siguientes son características agregadas recientemente: Plantillas móviles Se agregó la plantilla ASP.NET Web API para crear servicios basados ​​en REST. Soporte de tareas de controlador asíncrono. Agrupación de los scripts de Java. Segregación de configuraciones para enrutamiento ASP.Net MVC, API web, paquete, etc.

A continuación se muestran los procesados ​​seguidos en la secuencia:

  • App initializ ¿Qué es la separación de preocupaciones en ASP.NET ASP.Net MVCation?
  • Routing
  • Crear una instancia y ejecutar el controlador
  • Localizar e invocar la acción del controlador
  • Cree instancias y renderice la vista.

  • Proporciona una clara separación de preocupaciones entre la interfaz de usuario (capa de presentación), el modelo (objetos de transferencia / objetos de dominio / entidades) y la lógica de negocios (controlador).
  • Prueba UNIDAD fácil.
  • Reutilización mejorada del modelo y las vistas. Podemos tener múltiples vistas que pueden apuntar al mismo modelo y viceversa.
  • Estructuración mejorada del código.

Es el proceso de dividir el programa en varias características distintas que se superponen en funcionalidad lo menos posible. El patrón ASP.Net MVC se preocupa por separar el contenido de la presentación y el procesamiento de datos del contenido.

Razor es la primera actualización importante para renderizar HTML en ASP.Net MVC 3. Razor fue diseñado específicamente para la sintaxis del motor de visualización. El enfoque principal de esto sería simplificar y crear plantillas centradas en el código para la generación de HTML. A continuación se muestra la muestra del uso de Razor:

@model ASP.Net MVCMusicStore.Models.Customer
@{ViewBag.Title = "Get Customers";}
< div class="cust"> <h3><em>@Model.CustomerName</<em> </<h3><div>

Este es un término general que transmite una filosofía general, similar al término REST (Representational State Transfer). JavaScript no intrusivo no mezcla el código JavaScript en el marcado de su página. Por ejemplo: en lugar de utilizar eventos como onclick y onsubmit, el JavaScript discreto se adjunta a los elementos por su ID o clase en función de los atributos de datos de HTML5.

View Model es una clase simple con propiedades, que se usa para vincularla a una vista fuertemente tipada. View Model puede tener las reglas de validación definidas para sus propiedades usando anotaciones de datos.

El enrutamiento es un mecanismo de coincidencia de patrones de las solicitudes entrantes a los patrones de URL que se registran en la tabla de enrutamiento. Clase: "UrlRoutingModule" se utiliza para el mismo proceso.

Las acciones son los métodos de la clase Controller que se encargan de devolver la vista o los datos json. La acción tendrá principalmente el tipo de retorno: "ActionResult" y se invocará desde el método: "InvokeAction ()" llamado por el controlador.

ASP.NET Web API admite este tipo de enrutamiento. Esto se introduce en ASP.Net MVC5. En este tipo de enrutamiento, los atributos se utilizan para definir las rutas. Este tipo de enrutamiento brinda más control sobre el enrutamiento URI clásico. El enrutamiento de atributos se puede definir a nivel de controlador o a nivel de acción como:

[Route("{action = TestCategoryList}")] - Controller Level
[Route("customers/{TestCategoryId:int:min(10)}")] - Action Level

Simplemente agregue @ Model.CustomerName el método: "MapASP.Net MVCAttributeRoutes ()" para habilitar el enrutamiento de atributos como se muestra a continuación:

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        //enabling attribute routing
        routes.MapASP.Net MVCAttributeRoutes();
        //convention-based routing
        routes.MapRoute
        (
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Customer", action = "GetCustomerList", id = UrlParameter.Optional }
        );
    }

El soporte de enlace de JavaScript Object Notation (JSON) comenzó desde ASP.Net MVC3 en adelante a través de la nueva JsonValueProviderFactory, que permite que los métodos de acción acepten y modelen datos en formato JSON. Esto es útil en escenarios Ajax como plantillas de cliente y enlace de datos que necesitan enviar datos al servidor.

Dependency Resolver se ha introducido nuevamente en ASP.Net MVC3 y se simplifica enormemente el uso de la inyección de dependencias en sus aplicaciones. Esto resulta más fácil y útil para desacoplar los componentes de la aplicación y hacerlos más fáciles de probar y más configurables.

"BundleConfig.cs" en ASP.Net MVC4 se usa para registrar los paquetes por el sistema de empaquetado y minificación. Se agregan muchos paquetes de forma predeterminada, incluidas las bibliotecas jQuery como - jquery.validate, Modernizr y referencias CSS predeterminadas.

Método: "RegisterRoutes ()" se utiliza para registrar las rutas que se agregarán en el método "Application_Start ()" del archivo global.asax, que se activa cuando se carga o inicia la aplicación.

A continuación se muestran los espacios de nombres importantes utilizados en ASP.Net MVC:

  • System.Web.ASP.Net MVC
  • System.Web.ASP.Net MVC.Ajax
  • System.Web.ASP.Net MVC.Html
  • System.Web.ASP.Net MVC.Async

Viewdata contiene los pares clave, valor como diccionario y esto se deriva de la clase: "ViewDataDictionary". En el método de acción, estamos estableciendo el valor para viewdata y, en vista, el valor se obtendrá mediante encasillamiento.

ViewBag es un contenedor de ViewData, que permite crear propiedades dinámicas. La ventaja de viewbag sobre viewdata será: En ViewBag no es necesario encasillar los objetos como en ViewData. ViewBag aprovechará la palabra clave dinámica que se introdujo en la versión 4.0. Pero antes de usar ViewBag debemos tener en cuenta que ViewBag es más lento que ViewData.

TempData es nuevamente un par clave, valor como ViewData. Esto se deriva de la clase "TempDataDictionary". TempData se utiliza cuando los datos se van a utilizar en dos solicitudes consecutivas, esto podría ser entre las acciones o entre los controladores. Esto requiere encasillamiento a la vista.

Los HTML Helpers son como controles en formularios web tradicionales. Pero los ayudantes HTML son más livianos en comparación con los controles web, ya que no contienen viewstate ni eventos. HTML Helpers devuelve la cadena HTML que se puede representar directamente en la página HTML. También se pueden crear asistentes HTML personalizados anulando la clase "HtmlHelper".

Los AJAX Helpers se utilizan para crear elementos habilitados para AJAX, como formularios y enlaces habilitados para Ajax que realizan la solicitud de forma asincrónica y estos son métodos de extensión de la clase AJAXHelper que existe en el espacio de nombres - System.Web.ASP.Net MVC.

A continuación se muestran las opciones de los ayudantes AJAX:

  • Url: esta es la URL de la solicitud.
  • Confirmar: se utiliza para especificar el mensaje que se mostrará en el cuadro de confirmación.
  • OnBegin: nombre del método Javascript que se dará aquí y se llamará antes de la solicitud AJAX.
  • OnComplete: el nombre del método Javascript se proporcionará aquí y se llamará al final de la solicitud AJAX.
  • OnSuccess: el nombre del método Javascript se proporcionará aquí y se llamará cuando la solicitud AJAX sea exitosa.
  • OnFailure: el nombre del método Javascript se proporcionará aquí y se llamará cuando falle la solicitud AJAX.
  • UpdateTargetId: elemento de destino que se completa a partir de la acción que devuelve HTML.

Las páginas de diseño son similares a las páginas maestras de los formularios web tradicionales. Se utiliza para establecer el aspecto común en varias páginas. En cada página secundaria podemos encontrar: / p>

@{
Layout = "~/Views/Shared/TestLayout1.cshtml";
}
Esto indica que la página secundaria usa la página TestLayout como su página maestra.

Las secciones son la parte de HTML que se representará en la página de diseño. En la página Diseño usaremos la siguiente sintaxis para renderizar el HTML:

@RenderSection("TestSection")
Y en las páginas secundarias estamos definiendo estas secciones como se muestra a continuación:
@section TestSection{
<h1>Test Content<h1>
}
Si alguna página secundaria no tiene esta sección definida, se lanzará un error para evitar que podamos representar el HTML de esta manera:
@RenderSection("TestSection", required: false)

RenderBody es como ContentPlaceHolder en formularios web. Esto existirá en la página de diseño y representará las páginas / vistas secundarias. La página de diseño tendrá solo un método RenderBody (). RenderPage también existe en la página de diseño y varios RenderPage () pueden estar allí en la página de diseño.

Esta página se usa para asegurarse de que la página de diseño común se use para múltiples vistas. El código escrito en este archivo se ejecutará primero cuando se cargue la aplicación.

A continuación se muestran los métodos utilizados para renderizar las vistas desde la acción:

  • Ver (): para devolver la vista desde la acción.
  • PartialView (): para devolver la vista parcial de la acción.
  • RedirectToAction (): para redirigir a una acción diferente que puede estar en el mismo controlador o en un controlador diferente.
  • Redirect (): similar a "Response.Redirect ()" en formularios web, se utiliza para redirigir a la URL especificada.
  • RedirectToRoute (): Redirigir a la acción desde la URL especificada, pero la URL en la tabla de rutas ha coincidido.

ActionResult se utiliza para representar el resultado del método de acción. A continuación se muestran los subtipos de ActionResult:

  • ViewResult
  • PartialViewResult
  • RedirectToRouteResult
  • RedirectResult
  • JavascriptResult
  • JSONResult
  • FileResult
  • HTTPStatusCodeResult

En ASP.Net MVC, todos los métodos públicos se han tratado como Acciones. Entonces, si está creando un método y no desea usarlo como método de acción, entonces el método debe decorarse con el atributo "NonAction" como se muestra a continuación:

[NonAction]
public void TestMethod()
{
// Method logic
}

El atributo "ActionName" se puede utilizar para cambiar el nombre de la acción. A continuación se muestra el fragmento de código de muestra para demostrar más:

[ActionName("TestActionNew")]
public ActionResult TestAction()
    {
        return View();
    }
Entonces, en el fragmento de código anterior, "TestAction" es el nombre de la acción original y en el atributo "ActionName", se proporciona el nombre - "TestActionNew". Por tanto, la persona que llama a este método de acción utilizará el nombre "TestActionNew" para llamar a esta acción.

A diferencia de las expresiones de código que se evalúan y envían a la respuesta, son los bloques de código los que se ejecutan. Esto es útil para declarar variables que es posible que debamos utilizar más adelante.

@{
 int x = 123;
 string y = "aa";
 }

La propiedad HelperPage.IsAjax obtiene un valor que indica si se está utilizando Ajax durante la solicitud de la página web.

Crea un método JavaScript:

function DrpIndexChanged() { }
Invocar el método:
< %:Html.DropDownListFor(x => x.SelectedProduct, new SelectList(Model.Customers, "Value", "Text"), "Please Select a Customer", new { id = "ddlCustomers", onchange=" DrpIndexChanged ()" })%>

Las anotaciones de datos son atributos que se pueden encontrar en el espacio de nombres "System.ComponentModel.DataAnnotations". Estos atributos se utilizarán para la validación del lado del servidor y también se admite la validación del lado del cliente. Se utilizan cuatro atributos: requerido, longitud de cadena, expresión regular y rango para cubrir los escenarios de validación comunes.

Este método se utiliza para representar la vista parcial especificada como una cadena HTML. Este método no depende de ningún método de acción. Podemos usar esto como a continuación: @ Html.Partial ("TestPartialView")

Resultado del método: "RenderPartial" se escribe directamente en la respuesta HTML. Este método no devuelve nada (nulo). Este método tampoco depende de los métodos de acción. El método RenderPartial () llama a "Write ()" internamente y tenemos que asegurarnos de que el método "RenderPartial" esté entre corchetes. A continuación se muestra el fragmento de código de muestra: @ {Html.RenderPartial ("TestPartialView"); }

"RouteConfig.cs" contiene la configuración de enrutamiento para ASP.Net MVC. RouteConfig se inicializará en el evento Application_Start registrado en Global.asax.

Scaffolding en ASP.NET ASP.Net MVC se utiliza para generar los controladores, el modelo y las vistas para la funcionalidad de creación, lectura, actualización y eliminación (CRUD) en una aplicación. El andamio conocerá las convenciones de nomenclatura utilizadas para modelos, controladores y vistas.

A continuación se muestran los tipos de andamios:

  • Empty
  • Create
  • Delete
  • Details
  • Edit
  • List

Sí, podemos compartir una vista en varios controladores. Podemos poner la vista en la carpeta "Compartida". Cuando creamos un nuevo proyecto ASP.Net MVC, podemos ver que la página de diseño se agregará a la carpeta compartida, lo cual se debe a que es utilizada por varias páginas secundarias.

  • Nombre: este es el nombre de la ruta.
  • Patrón de URL: se asignarán marcadores de posición para que coincidan con el patrón de URL de la solicitud.
  • Valores predeterminados: al cargar la aplicación, qué controlador, acción que se cargará junto con el parámetro.

Usando esta ruta predeterminada - {resource} .axd / {* pathInfo}, podemos evitar que las solicitudes de archivos de recursos web como - WebResource.axd o ScriptResource.axd pasen a un controlador.

Sí, podemos agregar restricciones a la ruta de las siguientes maneras:

  • Usar expresiones regulares
  • Usando el objeto que implementa la interfaz - IRouteConstraint.

A continuación se muestran los dos tipos de extensiones que puede tener la vista de afeitadora:

  • .cshtml: En el lenguaje de programación C # se utilizará esta extensión.
  • .vbhtml: en el lenguaje de programación VB se utilizará esta extensión.

PartialView es similar a UserControls en formularios web tradicionales. Para fines de reutilización se utilizan vistas parciales. Dado que se ha compartido con varias vistas, estas se guardan en una carpeta compartida. Las vistas parciales se pueden renderizar de las siguientes formas:

  • Html.Partial()
  • Html.RenderPartial()

A continuación se muestra el fragmento de código de muestra para agregar css a las vistas de afeitar: <link rel = "StyleSheet" href = "/ @ Href (~ Content / Site.css") "type =" text / css "/>

No. No podemos agregar los casos de prueba en la edición Visual Studio Express, solo se pueden agregar en las versiones Professional y Ultimate de Visual Studio.

Glimpse es una herramienta de código abierto para depurar las rutas en ASP.Net MVC. Es el depurador del lado del cliente. Glimpse debe activarse visitando el enlace de la URL local: http: // localhost: portname // glimpse.axd Esta es una herramienta popular y útil para depurar que rastrea los detalles de velocidad, detalles de la URL, etc.

Los filtros de acción nos permiten ejecutar el código antes o después de que se haya ejecutado la acción. Esto se puede hacer decorando los métodos de acción de los controles con atributos ASP.Net MVC.

A continuación se muestran algunos filtros de acción utilizados:

  • Authentication
  • Authorization
  • HandleError
  • OutputCache

Esto se puede hacer de la siguiente manera: Use la clase: "HttpRequestBase" y use el método: "HttpMethod" para determinar el tipo de solicitud de acción.

Siempre que la validación falle, se realizará un seguimiento en ModelState. Utilizando property: IsValid se puede determinar. En el código del servidor, verifique así:

if(ModelState.IsValid){
     // No Validation Errors
}

En Web.Config hay etiquetas llamadas: "ClientValidationEnabled" y "UnobtrusiveJavaScriptEnabled". Podemos establecer la validación del lado del cliente simplemente estableciendo estas dos etiquetas en "verdadero", luego esta configuración se aplicará a nivel de la aplicación.

< add key="ClientValidationEnabled" value="true" />
< add key="UnobtrusiveJavaScriptEnabled" value="true" />

Para Model Binding usaremos la clase llamada: "ModelBinders", que da acceso a todos los modelos de enlace en una aplicación. Podemos crear carpetas de modelos personalizados heredando "IModelBinder".

El manejo de excepciones se simplifica en ASP.Net MVC y se puede hacer simplemente anulando "OnException" y estableciendo la propiedad de resultado del objeto filtercontext (como se muestra a continuación) en el detalle de la vista, que se devolverá en caso de excepción.

protected overrides void OnException(ExceptionContext filterContext)
    {
    }

Si Tempdata se asigna en la solicitud actual, estará disponible para la solicitud actual y la solicitud posterior y depende de si los datos en TempData se leen o no. Si se leen los datos en Tempdata, no estarán disponibles para las solicitudes posteriores.

Como se explicó anteriormente, en caso de que los datos en Tempdata se hayan leído en la solicitud actual, solo entonces se ha utilizado el método "Keep" para que esté disponible para la solicitud posterior.

@TempData["TestData"];
TempData.Keep("TestData");

Similar al método Keep, tenemos un método más llamado "Peek" que se utiliza para el mismo propósito. Este método se utiliza para leer datos en Tempdata y mantiene los datos para solicitudes posteriores.

string A4str = TempData.Peek("TT").ToString();

El área se utiliza para almacenar los detalles de los módulos de nuestro proyecto. Esto es realmente útil para aplicaciones grandes, donde los controladores, las vistas y los modelos están todos en las carpetas del controlador principal, la vista y el modelo y es muy difícil de administrar.

Cuando hayamos creado un área, asegúrese de que se registre en el evento "Application_Start" en Global.asax. A continuación se muestra el fragmento de código donde se realiza el registro de área:

protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
}

Para crear widgets reutilizables, se utilizan acciones secundarias que se integrarán en las vistas principales. En ASP.Net MVC se utilizan vistas parciales para tener capacidad de reutilización en la aplicación. La acción secundaria devuelve principalmente las vistas parciales.

El atributo "ChildActionOnly" se decora sobre los métodos de acción para indicar que el método de acción es una acción secundaria. A continuación se muestra el fragmento de código que se utiliza para denotar la acción secundaria:

[ChildActionOnly]
public ActionResult MenuBar()
{
//Logic here
return PartialView();
}

es un patrón de diseño y se usa para desarrollar código de par libre. Esto se usa mucho en los proyectos de software. Esto reducirá la codificación en caso de cambios en el diseño del proyecto, por lo que se usa mucho.

A continuación se muestran las ventajas de DI:

  • Reduce el acoplamiento de clases
  • Aumenta la reutilización de código
  • Mejora la mantenibilidad del código
  • Mejora las pruebas de aplicaciones

TDD es una metodología que dice, escribe tus pruebas primero antes de escribir tu código. En TDD, las pruebas impulsan los ciclos de diseño y desarrollo de su aplicación. No realiza el check-in de su código en el control de código fuente hasta que pasan todas las pruebas unitarias.

A continuación se muestran las herramientas utilizadas para las pruebas unitarias:

  • NUnit
  • xUnit.NET
  • Ninject 2
  • Moq

REST es un estilo arquitectónico que utiliza métodos de protocolo HTTP como GET, POST, PUT y DELETE para acceder a los datos. ASP.Net MVC funciona con este estilo. En ASP.Net MVC 4 hay un soporte para Web API que se usa para construir el servicio usando verbos HTTP.

Podemos usar anotaciones de datos para la validación en ASP.Net MVC. Si queremos usar la validación durante el tiempo de ejecución usando Jquery, podemos usar los complementos de Jquery para la validación. Por ejemplo: si la validación se va a realizar en el cuadro de texto del nombre del cliente, podemos hacer lo siguiente:

$('#CustomerName').rules("add", {
required: true,
minlength: 2,
messages: {
required: "Please enter name",
minlength: "Minimum length is 2"
}
});

A continuación se muestra el escenario y la solución para resolver el problema de varios botones de envío. Escenario:

@using (Html.BeginForm("MyTestAction","MyTestController")
{
    <input type="submit" value="MySave" />
    <input type="submit" value="MyEdit" />
}
Solucion:
Public ActionResult MyTestAction(string submit) //submit will have value either "MySave" or "MyEdit"
{
    // Write code here
}

  • Plantillas de visualización: se centran en el modelo. Lo que significa que depende de las propiedades del modelo de vista utilizado. Utiliza una convención que solo se mostrará como divs o etiquetas.
  • Editar plantillas: también se centran en el modelo, pero tendrán controles editables como cuadros de texto.
  • Vista parcial: estos están centrados en la vista. Estos diferirán de las plantillas por la forma en que representan las propiedades (Id's) Por ejemplo: CategoryViewModel tiene la propiedad de clase de producto, luego se representará como Model.Product.ProductName pero en el caso de las plantillas si CategoryViewModel tiene List entonces @ Html.DisplayFor (m => m.Products) funciona y renderiza la plantilla para cada elemento de esta lista.

No. No podemos establecer una longitud ilimitada para la propiedad maxJsonLength. El valor predeterminado es - 102400 y el valor máximo que podemos establecer sería: 2147483644.

Si. Podemos usar el código razor en javascript en cshtml usando el elemento <text>.

< script type="text/javascript">
@foreach (var item in Model) {
< text >
//javascript goes here which uses the server values
< text >
}
< script>

A continuación se muestra el fragmento de código para devolver la cadena del método de acción:

public ActionResult TestAction() {
return Content("Hello Test !!");
}

A continuación se muestra el fragmento de código para devolver la cadena del método de acción:

public ActionResult TestAction() {
return JSON(new { prop1 = "Test1", prop2 = "Test2" });
}