SORU
18 Mart 2011, Cuma


Bir yerinden Jilet bir Bölüm doldurmak

Benim ana motivasyon için çalışıyor yapmak için Javascript sadece gerekli bir kısmi alt kısmında, sayfanın geri kalan kısmı ile Javascript ve ortasında sayfası nerede, kısmi işlenmiş.

Burada yapmaya çalıştığım şey basit bir örnek:

Burada doğru vücut önce Komut bölümü ile düzeni.

<!DOCTYPE html>
<html>
<head>
    <title>@ViewBag.Title</title>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />    
</head>

<body>
    @RenderBody()
    <script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
    @RenderSection("Scripts", false)
</body>
</html>

İşte örnek bir görünüm bu düzeni kullanarak.

<h2>This is the view</h2>

@{Html.RenderPartial("_Partial");}

@section Scripts {
<script type="text/javascript">
        alert("I'm a view.");
</script>
}

Ve burada kısmi varlık görünümü işlenmiş.

<p>This is the partial.</p>

@* this never makes it into the rendered page *@
@section Scripts {
<script type="text/javascript">
    alert("I'm a partial."); 
</script>
}

Bu örnekte, işaretlemeyi görünümünde belirtilen bölüme yerleştirilir, ama basit biçimlendirme değildir. Ustura ile kısmi bir görüntüden bir bölüm doldurmak için mümkün mü? Bu sadece genel olarak dahil olmadan sayfanın altındaki parçaları gerekli Javascript almanın başka yöntemleri nelerdir?

CEVAP
4 Kasım 2011, Cuma


Bu bulduğum çözüm HtmlHelper sınıfı için birkaç uzatma yöntemleri yazmaktır. Bu kısımlar manzaralı bir script gerekli olduğunu söylemek sağlar, ve sonra etiketi yazar düzeni görünümünde Yardımcısı benim yöntem için gerekli komut dosyaları Yayımla diyorum

Burada yardımcı yöntemleri:

public static string RequireScript(this HtmlHelper html, string path, int priority = 1)
{
    var requiredScripts = HttpContext.Current.Items["RequiredScripts"] as List<ResourceInclude>;
    if (requiredScripts == null) HttpContext.Current.Items["RequiredScripts"] = requiredScripts = new List<ResourceInclude>();
    if (!requiredScripts.Any(i => i.Path == path)) requiredScripts.Add(new ResourceInclude() { Path = path, Priority = priority });
    return null;
}

public static HtmlString EmitRequiredScripts(this HtmlHelper html)
{
    var requiredScripts = HttpContext.Current.Items["RequiredScripts"] as List<ResourceInclude>;
    if (requiredScripts == null) return null;
    StringBuilder sb = new StringBuilder();
    foreach (var item in requiredScripts.OrderByDescending(i => i.Priority))
    {
        sb.AppendFormat("<script src=\"{0}\" type=\"text/javascript\"></script>\n", item.Path);
    }
    return new HtmlString(sb.ToString());
}
public class ResourceInclude
{
    public string Path { get; set; }
    public int Priority { get; set; }
}

Bunu bir kez kısmi görünümü sadece @Html.RequireScript("/Path/To/Script") aramak gerekir.

Ve sayfa düzeni görünümünü kafasına Bölüm @Html.EmitRequiredScripts() Ara.

Bu bir avantaj mı dışarı yinelenen komut dosyası istekleri ot olanak sağlamasıdır. Eğer belirli bir senaryo lazım bu kısmi görünümler/birden çok görünüm varsa, güvenli bir şekilde sadece bir kez çıktı mı olacağını varsayabiliriz

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ASUS Campus Life

    ASUS Campus

    18 Mart 2013
  • Nick Pitera

    Nick Pitera

    8 NİSAN 2006
  • pjtoohot

    pjtoohot

    15 NİSAN 2008