ASPNET Core Views z inej assembly (+ComponentViews)

Bohužiaľ, nenašiel som v rýchlosti postup, ktorý by fungoval s aktuálnou verziou .NETCore, takže som si to odšľapal sám, verím, že to pomôže aj niekomu ďalšiemu. Úvahu o samotných view components, ktoré v podstate nahrádzajú partial views a ktoré sú veľmi zaujímavým prvkom vo vzťahu k diskusiám, ktoré sprevádzali nástup asp.net mvc, si neodpustím v ďalšom blog príspevku.


Knižnica s views

 

1. Vytvoríme Class Library (.NET Core)

2. NuGet

    a) Odtrániť NetStandard.Library

    b) Pridať Microsoft.NETCore.App

    c) Pridať Microsoft.AspNetCore.MVC (nestačí .Core?)

    d) Pridať Microsoft.Extensions.FileProviders.Embedded

    e) Pridať Microsoft.AspNetCore.Razor.Tools (so zaškrtnutým include prerelease, aktuálne je vonku len 1.0.0-preview2-final)

3. Úprava project.json
          
 

"frameworks"

{
    
"netcoreapp1.0"

{
    "imports"

    [
        
"dotnet5.6",
        
"portable-net45+win8"
    ]
}

}

 

4. Doplnenie do project.json (štandardne hľadá razor component views na ceste Views/Shared/Components/….)

 

    "buildOptions":
    {
        "embed""Views/**/*.cshtml"
    }
 

 

5, Vytvoríme sparťanský view component

[ViewComponent(Name = "ClassLibrary1.Test")]

public class TestViewComponent : ViewComponent
{
        
public IViewComponentResult Invoke(string msg)
        {
                
return View<string>(msg);
        }
}

 

6. Vytvoreníme template pre view component

 

@model string
 
<h1>@Model</h1>

 

Použitie views

 

1. Pridáme referenciu na knižnicu

2. V Startup.cs upravíme konfiguráciu, razoru umožníme vyhľadávať views prostredníctvom embedded providera

 

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
 
    var assembly = typeof(TestViewComponent).GetTypeInfo().Assembly;
 
    var embeddedFileProvider =
        new EmbeddedFileProvider(
            assembly,
            "ClassLibrary1");
 
    services.Configure<RazorViewEngineOptions>(options =>
    {
        options.FileProviders.Add(embeddedFileProvider);

    });
}

3. V template view invokneme náš view component

 

@await Component.InvokeAsync("ClassLibrary1.Test"new { msg= "Hello W!" })

Zaradené do: ,

Komentáre

Bez komentárov

Prihlásiť | Registrovať | Pomoc