2012-09-06 21 views
9

Estoy tratando de averiguar si es posible agregar a una sección. Aquí está mi estructura:ASP.NET MVC 3: Adjuntar a las secciones

_Layout.cshtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
<link href="@Url.Content("~/Content/style.css")" rel="stylesheet" type="text/css" /> 
@RenderSection("Css", false) 
<script type="text/javascript" src="@Url.Content("~/Content/scripts/head.load.min.js")"></script> 
</head> 
<body class="bg_g"> 
    @RenderBody() 
    <script type="text/javascript"> 
     @RenderSection("Javascript", false) 
    </script> 
</body> 
</html> 

Logon.cshtml

@{ 
    Layout = "~/Views/Shared/_DMZ.cshtml"; 
    ViewBag.Title = "Logon"; 
} 

@section Javascript += { 
    // JAVASCRIPT CODE; 
} 

<div> 
    Stuff 
    @{ Html.RenderAction("Register", "Account"); } 
    @{ Html.RenderAction("Register2", "Account"); } 
</div> 

Register.cshtml

@{ 
    Layout = null; 
} 

@section Javascript += { 
    // More javascript code 
} 

<div> 
    Register stuff 
</div> 

Register2.cshtml

@{ 
    Layout = null; 
} 

@section Javascript += { 
    // Even More javascript code 
} 

<div> 
    Register stuff part 2 
</div> 

Espero que eso explique lo que estoy tratando de hacer. También me gustaría hacer lo mismo con mi sección CSS. Sería aún mejor si yo también podría llegar a representar el Javascript de esta manera:

head.js(
    "@Url.Content("~/Content/scripts/jquery-1.6.2.min.js")", 
    "@Url.Content("~/Content/scripts/jquery.tools.min.js")", 
    "@Url.Content("~/Content/lib/jquery-validation/jquery.validate.js")", 
// Loop through all javascript files included from the sub views and add them just like above 
function() { 
    loginTabs.init(); 
    // Loop through all javascript functions that have been added to the InitFunctions section? 
} 
) 

Tal secciones no son la solución correcta a este problema, pero sé que tiene que haber una manera de lograr algo Me gusta esto. ¿Algunas ideas?

Respuesta

0

Un poco de una entrada tardía - pero espero que sigue siendo útil a alguien por ahí:

No sé si hay un método nativo para lograrlo, pero he estado usando durante algún tiempo ahora y es muy útiles:

public static IHtmlString Resource(this HtmlHelper HtmlHelper, Func<object, HelperResult> Template, string Type) 
{ 
    if(HtmlHelper.ViewContext.HttpContext.Items[Type] != null) ((List<Func<object, HelperResult>>)HtmlHelper.ViewContext.HttpContext.Items[Type]).Add(Template); 
    else HtmlHelper.ViewContext.HttpContext.Items[Type] = new List<Func<object, HelperResult>> { Template }; 

    return new HtmlString(String.Empty); 
} 

public static IHtmlString RenderResources(this HtmlHelper HtmlHelper, string Type) 
{ 
    if(HtmlHelper.ViewContext.HttpContext.Items[Type] == null) return new HtmlString(String.Empty); 

    var Resources = (List<Func<object, HelperResult>>)HtmlHelper.ViewContext.HttpContext.Items[Type]; 

    foreach(var Resource in Resources.Where(Resource => Resource != null)) 
    { 
     HtmlHelper.ViewContext.Writer.Write(Resource(null)); 
    } 

    return new HtmlString(String.Empty); 
} 

El uso es:

//This is how you save it 
@Html.Resource(@<style>.test{color: #4e4e4e}</style>, "css") 

//This is how you read it 
@Html.RenderResources("css")