2012-10-11 18 views
5

HTML kodunu mevcut bir tıraş makinesi bölümüne eklemek mümkün mü? _article.cshtml, ben bölüm aşağıda gibi tanımladığınız - görünümde biri olanMevcut Jilet bölümüne HTML kodu ekle

@RenderSection("BottomSection", required: false) 

ve:

Benim _layout.cshtml böyle bir şey içerir: Aşağıda

benim senaryodur
@section BottomSection 
{ 
<script src='~/Scripts/module/article_details.js' type='text/javascript'></script> 
<script src='~/Scripts/module/modal.js' type='text/javascript'></script> 
@MvcHtmlString.Create(Model.ExtraStuff) 
} 

ve yukarıdaki görünüm tarafından kullanılan _counter.cshtml adlı kısmi görünümde; Aynı bölüme, yani BottomSection'a daha fazla HTML kodu eklemek istiyorum.

Ben kısmi görünümde yeniden BottomSection bölümüne bildirerek çalıştı:

@section BottomSection{ 
<text>More data</text> 
} 

Ama çalıştı olmadı.

Bunu gerçekleştirmenin herhangi bir yolu var mı - MVC 4'te zaten tanımlanmış bir tıraş makinesi bölümüne dinamik olarak daha fazla kod eklemek? Lütfen kısmi görünümün ana görünümden/modelden veri beklemediğini unutmayın. Ve .NET Framework 4.0/VS2010 ile MVC 4 kullanıyorum.

cevap

-3

Ajax'ı kullanarak kısmi görünümü yükleyebilir ve hedef bölümünüzde işleyebilirsiniz.

iç içe geçmiş kısmi görünümleri kullanarak Yüklü neden ben sorunuzu anlamıyorum ama jquery ajax Belki

 $.ajax({ 
      type: 'GET', 
      url: '@Url.Action("Action","Controller")', 
      cache: false, 
      timeout: 20000, 
      contentType: "application/json; charset=utf-8", 
      success: function (_results) { 
       $("#TargetDiv").html(_results); 
      }, 
      error: function (_results) { 

      } 
     }); 
+0

söyle lütfen. Yeni oluşturulmuş html'yi zaten oluşturulmuş görünüme eklemek için aynı şeyi denedim – amesh

+0

Yanıtladığınız için teşekkürler, ancak bu yapmak istemedim. Kısmi görünüm daha fazla içerik/komut dosyası referansı vb. Ekleyebilir. Veriler bir gidiş dönüş isteği ekleyecektir ve o zamana kadar sayfam işe yaramayacaktır! – Kay

-2

kullanmayı deneyin ??? örneğin

:

PartialView1

`<script src='~/Scripts/module/article_details.js' type='text/javascript'></script> 
<script src='~/Scripts/module/modal.js' type='text/javascript'></script> 
@MvcHtmlString.Create(Model.ExtraStuff) 
@{Html.RenderPartial("PartialView2",Model.ExtraStuff);}` 

PartialView2

`<text>More data</text>` 
+0

Çoklu kısmi görünümlere sahip olmak sorunu çözecektir. Ancak, bu benim için çok fazla kısmi görüntü dosyasına sahip olacak - dinamik yaklaşımın amacına meydan okuyor. – Kay

0

ben (aslında ben de bunu bilmek istiyorum) bölümlere şeyler eklemek için nasıl bilmiyorum, ama benzer bir sonuç yaratabilecek bir hile biliyorum. Bölümleri kullanmak yerine TempData'yı kullanabilir. TempData ViewBag gibi bir çoktur, ancak bir değişken ayarlandıktan sonra, geçerli kullanıcı için tekrar erişmeye çalışana kadar geçerli kullanıcı için orada yaşayacaktır (mevcut kullanıcı için birkaç ardışık istekle yaşayabilir, bu nedenle ekstra dikkat önerilir). Aşağıda nasıl kullanılabileceğine dair bir örnek verilmiştir. düzende

: Kısmi görünümünde

@{ 
    var bottomSection = (string)TempData["BottomSection"]; 
    if (bottomSection == null) 
    { 
     bottomSection = ""; 
    } 
    bottomSection += "<script src='~/Scripts/module/article_details.js' type='text/javascript'></script>\n"; 
    bottomSection += "<script src='~/Scripts/module/modal.js' type='text/javascript'></script>\n"; 
    bottomSection += Model.ExtraStuff + "\n"; 
    TempData["BottomSection"] = bottomSection; 
} 

: görünümünde

@Html.Raw(new MvcHtmlString((string)TempData["BottomSection"])); 

@{ 
    var bottomSection = (string)TempData["BottomSection"]; 
    if (bottomSection == null) 
    { 
     bottomSection = ""; 
    } 
    bottomSection += "More data"; 
    TempData["BottomSection"] = bottomSection; 
} 

Bu da bu sözde bölümleri için bir yardımcı yazarak geliştirilebilir ve/veya bölümlerin içeriğini ayrı bir kısmi hareket ettirerek (aşağıya bakın).

bottomSection += Html.Partial("_StuffToAddToSection").ToString(); 

Yardımcısı sınıfı:

public static class PseudoSectionsHelper 
{ 
    public static MvcHtmlString AppendToPseudoSection<T>(this TempDataDictionary TempData, string sectionName, T model, Func<T, HelperResult> content, bool addNewLineCharacter = true) 
     where T : class 
    { 
     return AppendToPseudoSection(TempData, sectionName, content(model).ToString(), addNewLineCharacter); 
    } 

    public static MvcHtmlString AppendToPseudoSection(this TempDataDictionary TempData, string sectionName, MvcHtmlString content, bool addNewLineCharacter = true) 
    { 
     return AppendToPseudoSection(TempData, sectionName, content.ToString(), addNewLineCharacter); 
    } 

    public static MvcHtmlString AppendToPseudoSection(this TempDataDictionary TempData, string sectionName, string content, bool addNewLineCharacter = true) 
    { 
     var section = (string)TempData[sectionName]; 
     if (section == null) 
     { 
      section = ""; 
     } 
     else if (addNewLineCharacter) 
     { 
      section += "\n"; 
     } 
     section += content; 
     TempData[sectionName] = section; 
     // We return empty MvcHtmlString to be able to use this helper inline (without declaring code block @{ some code... } in view) 
     return new MvcHtmlString(""); 
    } 

    public static MvcHtmlString PseudoSection(this TempDataDictionary TempData, string sectionName) 
    { 
     var section = (string)TempData[sectionName]; 
     return new MvcHtmlString(section); 
    } 
} 

Kullanım örneği

düzeni eklenti olarak: görünümünde

@TempData.PseudoSection("BottomSection") 

:

@{ 
    TempData.AppendToPseudoSection("BottomSection", Model, @<text> 
     <script src='~/Scripts/module/article_details.js' type='text/javascript'></script> 
     <script src='~/Scripts/module/modal.js' type='text/javascript'></script> 
     @MvcHtmlString.Create(Model.ExtraStuff) 
    </text>); 
} 

hatta

@TempData.AppendToPseudoSection("BottomSection", Html.Partial("BottomSectionScriptsAndStuff")) 

Ve kısmi 10.

@TempData.AppendToPseudoSection("BottomSection", Model, @<text> 
    <script src='~/Scripts/module/article_details.js' type='text/javascript'></script> 
    <script src='~/Scripts/module/modal.js' type='text/javascript'></script> 
    @MvcHtmlString.Create(Model.ExtraStuff) 
</text>) 

veya

: bu çözüm neden yanlış olduğunu

@TempData.AppendToPseudoSection("BottomSection", "More data") 
+0

TempData yerine System.Web.HttpContext.Current.Items'in kullanılması TempData'nın daha iyi bir fikir olabilir, çünkü okuyamayacağınız sürece tuhaf durumlara yol açabilir (sonuç vermediğiniz bölüm gibi). bir sayfada, başka bir sayfada işler). – jahu

İlgili konular