asp.net-mvc "renderbody" - ¿Cómo puedo especificar diferentes diseños en el archivo ViewStart de la máquina de afeitar ASP.NET MVC 3?




método página (4)

Me gustaría tener 2 diseños separados en mi aplicación. Digamos que uno es para la sección Pública del sitio web y el otro para el lado Miembro.

Para simplificar, digamos que toda la lógica de cada uno de estos sitios está perfectamente integrada en 2 controladores distintos.

  • Controlador público
  • Controlador de personal

Y que cada uno tiene un diseño correspondiente para todas las vistas debajo de cada una.

  • _PublicLayout.cshtml
  • _StaffLayout.cshtml

¿Cómo uso el archivo _ViewStart.cshtml para especificar que todas las Vistas / Acción en "Público" usan PublicLayout y todo lo que en "Personal" usa StaffLayout?

¡Gracias!


Answers

Podría colocar un archivo _ViewStart.cshtml dentro de la carpeta /Views/Public que anularía el predeterminado en la carpeta /Views y especificaría el diseño deseado:

@{
    Layout = "~/Views/Shared/_PublicLayout.cshtml";
}

Por analogía, puede colocar otro archivo _ViewStart.cshtml dentro de la carpeta /Views/Staff con:

@{
    Layout = "~/Views/Shared/_StaffLayout.cshtml";
}

También puede especificar qué diseño debe usarse al devolver una vista dentro de una acción del controlador, pero eso es por acción:

return View("Index", "~/Views/Shared/_StaffLayout.cshtml", someViewModel);

Otra posibilidad más es un filtro de acción personalizado que anularía el diseño. Como puedes ver muchas posibilidades para lograrlo. Depende de usted elegir cuál encaja mejor en su escenario.

ACTUALIZAR:

Tal como se solicita en la sección de comentarios, aquí hay un ejemplo de un filtro de acción que elegiría una página maestra:

public class LayoutInjecterAttribute : ActionFilterAttribute
{
    private readonly string _masterName;
    public LayoutInjecterAttribute(string masterName)
    {
        _masterName = masterName;
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        base.OnActionExecuted(filterContext);
        var result = filterContext.Result as ViewResult;
        if (result != null)
        {
            result.MasterName = _masterName;
        }
    }
}

y luego decorar un controlador o una acción con este atributo personalizado que especifica el diseño que desea:

[LayoutInjecter("_PublicLayout")]
public ActionResult Index()
{
    return View();
}

Este método es la forma más sencilla para que los principiantes controlen la representación de Diseños en su aplicación ASP.NET MVC. Podemos identificar el controlador y representar los diseños como controlador par. Para ello, podemos escribir nuestro código en el archivo _ViewStart en el directorio raíz de la carpeta Vistas. A continuación se muestra un ejemplo que muestra cómo se puede hacer.

  @{
             var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"].ToString();
             string cLayout = "";
            if (controller == "Webmaster") {
                  cLayout = "~/Views/Shared/_WebmasterLayout.cshtml";
                 }
               else {
                cLayout = "~/Views/Shared/_Layout.cshtml";
               }
        Layout = cLayout;
         }

Lea el artículo completo here "Cómo representar un diseño diferente en ASP.NET MVC"


Un método más es definir el diseño dentro de la vista:

   @{
    Layout = "~/Views/Shared/_MyAdminLayout.cshtml";
    }

Más formas de hacer, se pueden encontrar here , espero que esto ayude a alguien.


Dar una solución completa

Primer uso de entrada en .CShtml en MVC View

<input type="file" id="UploadImg" /></br>
<img id="imgPreview" height="200" width="200" />

Ahora llama a Ajax

  $("#UploadImg").change(function () {
    var data = new FormData();
    var files = $("#UploadImg").get(0).files;
    if (files.length > 0) {
        data.append("MyImages", files[0]);
    }

    $.ajax({
        // url: "Controller/ActionMethod"
        url: "/SignUp/UploadFile",
        type: "POST",
        processData: false,
        contentType: false,
        data: data,
        success: function (response)
        {
            //code after success
            $("#UploadPhoto").val(response);
            $("#imgPreview").attr('src', '/Upload/' + response);
        },
        error: function (er) {
            //alert(er);
        }

    });
});

Controlador Json Call

[HttpGet]
public JsonResult UploadFile()
    {
        string _imgname = string.Empty;
        if (System.Web.HttpContext.Current.Request.Files.AllKeys.Any())
        {
            var pic = System.Web.HttpContext.Current.Request.Files["MyImages"];
            if (pic.ContentLength > 0)
            {
                var fileName = Path.GetFileName(pic.FileName);
                var _ext = Path.GetExtension(pic.FileName);

                _imgname = Guid.NewGuid().ToString();
                var _comPath = Server.MapPath("/MyFolder") + _imgname + _ext;
                _imgname = "img_" + _imgname + _ext;

                ViewBag.Msg = _comPath;
                var path = _comPath;
                tblAssignment assign = new tblAssignment();
                assign.Uploaded_Path = "/MyFolder" + _imgname + _ext;
                // Saving Image in Original Mode
                pic.SaveAs(path);
            }
        }
        return Json(Convert.ToString(_imgname), JsonRequestBehavior.AllowGet);
    }






asp.net-mvc layout asp.net-mvc-3 razor