Hej, uczę się asp.net mvc i mam taki problem, strona ma mieć taki sam wzór dla wszystkich podstron, tzn. np mamy odnośniki do takich stron jak: o firmie, lista produktów, pomoc itp, chcę by zmieniała się zawartość tylko w jednym miejscu na stronie. Stronke podzieliłem div-ami na osobne bloki takie jak top, center składający się z left i right oraz bottom, w divie left jest lista odnośników a w center treść dla danego odnośnika. I teraz moje pytanie jest takie czy powinienem dla każdego odnośnika pisać cały schemat strony, tzn powielać listę div-ów i zmieniać po prostu wszędzie zawartość center czy jakoś inaczej? Chciałbym zrobić tak żeby cała treść z wyjątkiem div-u center znajdowała się w jednym layoucie z którego dziedziczy każdy odnośnik, a div center byłby uzupełniany w poszczególnych podstronach. Czy to możliwe? Jak to zrobić? Z góry dziękuję.
Takie coś, to oczywista oczywistość.
Umieść swój wzorcowy kod html w pliku Views\Shared\_Layout.cshtml
, użyj @RenderBody()
tam, gdzie mają być sekcje zmienne na poszczególnych podstronach. Reszta zadziała automatycznie.
Dzięki, rzeczywiście to zadziałało, ale pojawił się inny problem. W stworzonym przeze mnie layoucie umieściłem całą strukturę strony, jest tam też kilka ActionLinków, gdy strona się uruchamia to wszystko jest dobrze, lecz gdy kliknę w któryś link to treść się zgadza, ale nie są przypisane żadne style które mam w osobnym pliku i przez to wszystko strasznie wygląda. Jeśli w layoucie nadał bym style bezpośrednio do div-ów to wszystko było by ok - próbowałem, ale po prostu przy kliknięciu w odnośnik nie jest uwzględniany mój plik ze stylami. Co może być nie tak?
Pozdrawiam
Ale załączasz te CSSy w Layout.cshtml
?
Załączyłem ten plik w moim pliku z layoutem -_LayoutPage1.cshtml i wszystkim tym moim stronom ustawiłem ten plik jako layout więc nie dodawałem styli do pliku _Layout.cshtml, po Twoim poście spróbowałem także tam dodać plik ze stylami ale to nic nie pomogło. Tak wygląda kod
plik _LayoutPage1.cshtml
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<meta charset="UTF-8" />
<title>@ViewBag.Title</title>
<link rel="stylesheet" type="text/css" href="Content\Site.css" />
</head>
<body>
<div id="kontener">
<div id="top" style="margin:0px">
</div>
<div id="center">
<div id="left">
@Html.ActionLink("O Firmie","oFirmie") </br>
<a href="www.onet.pl">Dostępny towar</a> </br>
</div>
<div id="right">
@RenderBody()
</div>
</div>
<div id="bottom">
TO jest STOPKA [CIACH!]!!!AAAA
</div>
</div>
</body>
</html>
plik
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data.SqlClient;
using sklep02.Models;
namespace sklep02.Controllers
{
public class HomeController : Controller
{
List<produkt> produkty = new List<produkt>();
private void wczytajListeProduktow()
{
//kod
}
public ViewResult oFirmie()
{
return View();
}
public ActionResult Index()
{
wczytajListeProduktow();
return View(produkty);
}
}
}
plik index.cshtml
@model List<sklep02.Models.produkt>
@{
ViewBag.Title = "Index";
Layout="~/Views/_LayoutPage1.cshtml";
}
Index
plik oFirmie.cshtml
@{
ViewBag.Title = "oFirmie";
Layout = "~/Views/_LayoutPage1.cshtml";
}
O firmie
dodanie znaczników <code class="html">, <code class="csharp"> i <code class="css"> oraz usunięcie wulgaryzmów - fp
<link rel="stylesheet" type="text/css" href="Content\Site.css" />
zamień na
<link rel="stylesheet" type="text/css" href="/Content/Site.css" />
a w mvc4 możesz użyć czegoś takiego jak @Styles.Render(), tylko musisz dodać swój css do bundle (->google).