2010-02-01 9 views
5

मैं इसवहाँ 2

<% foreach (var person in Model.People) 
{ 
%> 
    <tr> 
     <td><%= Html.ActionLink(accessory.Name, "EditPerson") %></td> 
     <td><%= Html.DisplayFor(c => person.Name) %></td> 
     <td><%= Html.DisplayFor(c => person.Age) %></td> 
     <td><%= Html.DisplayFor(c => person.Budget)%></td> 
    </tr> 
<%} %> 

मैं चूक ओवरराइड करने के लिए टेम्पलेट्स बना लिया है की तरह डेटा की एक तालिका का निर्माण कर रहा हूँ ASP.MVC में HideSurroundingHtml मान सेट करने के लिए एक तरह से निम्नलिखित Brad Wilson's tutorial है:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %> 
<script runat="server"> 
    protected override void OnInit(EventArgs e) { 
     base.OnInit(e); 

     if (ViewData.ModelMetadata.HideSurroundingHtml) { 
      TablePlaceholder.Visible = false; 
     } 
     else { 
      Controls.Remove(Data); 
      DataPlaceholder.Controls.Add(Data); 
     } 
    } 
</script> 
<asp:ContentPlaceHolder runat="server" id="Data" /> 
<asp:PlaceHolder runat="server" id="TablePlaceholder"> 
    <table cellpadding="0" cellspacing="0" border="0" width="100%"> 
     <tr> 
      <td style="width: 10em;"> 
       <div class="display-label" style="text-align: right;"> 
        <asp:ContentPlaceHolder runat="server" id="Label"> 
         <%= ViewData.ModelMetadata.GetDisplayName() %> 
        </asp:ContentPlaceHolder> 
       </div> 
      </td> 
      <td> 
       <div class="display-field"> 
        <asp:PlaceHolder runat="server" id="DataPlaceholder" /> 
       </div> 
      </td> 
     </tr> 
    </table> 
</asp:PlaceHolder> 

तालिका को प्रतिपादित करते समय मैं आसपास के HTML को प्रदर्शित नहीं करना चाहता, लेकिन मेरे पास कोई संकेत नहीं है कि HideSurroundingHtml मान कैसे सेट करें?

उत्तर

3

इसे इस तरह किया जाएगा करने के लिए एक स्पष्ट और अधिक स्पष्ट रास्ता:

public class MyModel 
{ 
    [AdditionalMetadata("HideSurroundingHtml", true)] 
    public string Something { get; set; } 
} 

और अपने ध्यान में रखते हुए:

bool hideSurroundingHtml = (this.ViewData.ModelMetadata.AdditionalValues.ContainsKey("HideSurroundingHtml") ? (bool)this.ViewData.ModelMetadata.AdditionalValues["HideSurroundingHtml"] : false); 

if (!hideSurroundingHtml) 
{ 
    @:<div> 
} 

//Content. 

if (!hideSurroundingHtml) 
{ 
    @:</div> 
} 
+0

मुझे यह समाधान पसंद है। – adriaanp

+0

धन्यवाद, मैं अभी भी पागल नहीं हूं कि एचटीएमएल सभी 'if' कथनों के साथ कैसे निकलता है, लेकिन मुझे लगता है कि यह इसके बारे में जाने का एक बहुत ही सरल तरीका है। –

+0

ध्यान दें कि यह तकनीक 'अतिरिक्त वैल्यू' शब्दकोश में एक प्रविष्टि बनाता है और एक्सेस करती है और वास्तव में 'ModelMetadata'' में 'HideSurroundingHtml' ध्वज सेट नहीं करती है; अनजाने में, झंडा झूठा रहता है। – Suncat2000

10

के अनुसार MSDN page on ModelMetadata.HideSurroundingHtml Property:

इस संपत्ति DataAnnotationsModelMetadataProvider मॉडल मेटाडाटा प्रदाता के साथ प्रयोग किया जाता है, यह सेट किया गया है सच करने के लिए दोनों HiddenInputAttribute विशेषता सच है और DisplayValue संपत्ति सेट कर दिया जाता है जब झूठी करने के लिए।

तो आप इस के साथ अपने मॉडल में अपनी संपत्ति को सजाने के लिए की जरूरत है:

[HiddenInput(DisplayValue = false)] 

मैं मेरे लिए कोई मतलब नहीं है, लेकिन यह काम करने के लिए लगता है!

+2

मैं इसे करने की कोशिश करना होगा, लेकिन आंत महसूस से मुझे लगता है कि कि यह छुपा टेम्पलेट के साथ प्रस्तुत करने जा रहा है, न कि टेम्पलेट मैं चाहता हूं। – adriaanp

+0

@adriaanp यह इसे 'छुपे हुए इनपुट' टेम्पलेट का उपयोग करने का कारण बन सकता है, लेकिन आप उसी संपत्ति पर 'UIHint' विशेषता के साथ इसे ओवरराइड कर सकते हैं। – TLS