ورود

View Full Version : مفهوم ("") RenderSection@ ؟



vb8334
دوشنبه 05 خرداد 1393, 13:24 عصر
با سلام به تمامی دوستان


من یه چیزی رو نفهمیدم در مورد ("") RenderSection@ هستش اگه میشه یه توضیحی در مورد این موضوع ارائه بدید و یه مثالی بزیند.

و یه چند تا سوال :

1-اگه عبارت ("") RenderSection@ به صورت زیر باشه به چه معنی هستش؟

@RenderSection("name of section", required : false).

2- و یه کد نمونه هم گذاشتم در همین مورد یه توضیحی بدید ممنون میشم



<!DOCTYPE html><html lang="en">
<head>
<meta charset="utf-8" />
<title>@ViewBag.Title - My ASP.NET MVC Application</title>
<link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
<meta name="viewport" content="width=device-width" />
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
</head>
<body>
<header>
<div class="content-wrapper">
<div class="float-left">
<p class="site-title">
@Html.ActionLink("your logo here", "Index", "Home")
</p>
</div>
<div class="float-right">
<section id="login">
@Html.Partial("_LoginPartial")
</section>
<nav>
<ul id="menu">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact Us", "Contact", "Home")</li>
</ul>
</nav>
</div>
</div>
</header>
<div id="body">
@RenderSection("featured", required: false)
<section class="content-wrapper main-content clear-fix">
@RenderBody()
</section>
</div>
<footer>
<div class="content-wrapper">
<div class="float-left">
<p>&copy; @DateTime.Now.Year - My ASP.NET MVC Application</p>
</div>
</div>
</footer>
@Scripts.Render("~/bundles/jquery")
@RenderSection("scripts", required: false)
</body>
</html>

3-و همچنین دیدم تو کدها که همون کدهای بالا هستش اما چرا @section featured به صورت آکولاد باز هستش این به چه معنی هستش؟



@{ViewBag.Title = "Home Page";
}
@section featured {
<div class="featured">
<div class="content-wrapper">
<hgroup class="title">
<h1>@ViewBag.Title.</h1>
<h2>@ViewBag.Message</h2>
</hgroup>
<p>
To learn more about ASP.NET MVC visit
<a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
The page features <mark>videos, tutorials, and samples</mark> to help you get the
most from ASP.NET MVC.
If you have any questions about ASP.NET MVC visit
<a href="http://forums.asp.net/1146.aspx/1?MVC" title="ASP.NET MVC Forum">our
forums</a>.
</p>
</div>
</div>
}

با تشکر

rezaei_y
دوشنبه 05 خرداد 1393, 14:20 عصر
برای اضافه کردن فایل های css و javascript به صفحه مستر از طریق صفحات content می باشد

parvizwpf
دوشنبه 05 خرداد 1393, 14:31 عصر
کلا برای قرار دادن یک تکه ویوی جداگانه میتونید ازش استفاده کنید. روش دوم هم هنگامی میاد که شما میخواهید مستقیما html داخل ویو رو بنویسید بدون اینکه فایل جداگانه ای برای ویو بسازید.

vb8334
دوشنبه 05 خرداد 1393, 14:57 عصر
مرسی از پاسخ دوستان

الان در شماره 3 که زدم اون آکولاد باز (@section featured {) منظورتون این هستش که خودش کد رو نوشته یعنی اینکه فایل جداگانه ننوشته؟

مرسی

vb8334
دوشنبه 05 خرداد 1393, 15:06 عصر
در ضمن در حال مطالعه این کتاب هستم Begining Asp.net MVC 4 انتشارات apress

و این مبحث هم که سوال دارم مبحث Understanding the Razor View Engine هستش

مرسی

parvizwpf
دوشنبه 05 خرداد 1393, 15:45 عصر
خودش ننوشته. شما باید پیاده کنید. بهتره این مبحث رو کلا سرچ کنید.

helpsos
دوشنبه 05 خرداد 1393, 22:19 عصر
تزریق نواحی ویژه یک View در فایل layout

توسط متد RenderBody، کل محتوای View درخواستی در موقعیت تعریف شده آن در فایل Layout، رندر می‌شود. این ویژگی به نحو یکسانی به تمام Viewها اعمال می‌شود. اما اگر نیاز باشد تا view بتواند محتوای markup قسمت ویژه‌ای از master page را مقدار دهی کند، می‌توان از مفهومی به نام Sections استفاده کرد:

<!DOCTYPE html><html>
<head>
<title>@ViewBag.Title</title>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
</head>
<body>
<div id="menu">
@if (IsSectionDefined("Menu"))
{
RenderSection("Menu", required: false);
}
else
{
<span>This is the default ...!</span>
}
</div>
<div id="body">
@RenderBody()
</div>
</body>
</html>

در اینجا ابتدا بررسی می‌شود که آیا قسمتی به نام Menu در View جاری که باید رندر شود وجود دارد یا خیر. اگر بله، توسط متد RenderSection، آن قسمت نمایش داده خواهد شد. در غیراینصورت، محتوای پیش فرضی را در صفحه قرار می‌دهد. البته اگر از متد RenderSection با آرگومان required: false استفاده شود، درصورتیکه View جاری حاوی قسمتی به نام مثلا menu نباشد، تنها چیزی نمایش داده نخواهد شد. اگر این آرگومان را حذف کنیم، یک استثنای عدم یافت شدن ناحیه یا قسمت مورد نظر صادر می‌گردد.
نحوه‌ی تعریف یک Section در Viewهای برنامه به شکل زیر است:

@{ ViewBag.Title = "Index";
//Layout = null;
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>
Index</h2>
@section Menu{
<ul>
<li>item 1</li>
<li>item 2</li>
</ul>
}
برای مثال فرض کنید که یکی از Viewهای شما نیاز به دو فایل اضافی جاوا اسکریپت برای اجرای صحیح خود دارد. می‌توان تعاریف الحاق این دو فایل را در قسمت header فایل layout قرار داد تا در تمام Viewها به صورت خودکار لحاظ شوند. یا اینکه یک section سفارشی را به نحو زیر در آن View خاص تعریف می‌کنیم:

@section JavaScript{
<script type="text/javascript" src="@Url.Content("~/Scripts/SomeScript.js")" />;
<script type="text/javascript" src="@Url.Content("~/Scripts/AnotherScript.js")" />;
}
سپس کافی است جهت تزریق این کدها به header تعریف شده در master page مورد نظر، یک سطر زیر را اضافه کرد:

@RenderSection("JavaScript", required: false)
به این ترتیب، اگر view ایی حاوی تعریف قسمت JavaScript نبود، به صورت خودکار شامل تعاریف الحاق اسکریپت‌های یاد شده نیز نخواهد گردید. در نتیجه دارای حجمی کمتر و سرعت بارگذاری بالاتری نیز خواهد بود.