سؤال

يبدو أنه إذا كنت تستخدم فقط Html.DisplayFor(model => model) مع عدم وجود قوالب لعرض تفاصيل، فإن العلامات الناتجة ستبدو شيئا مثل هذا:

<div class="display-label">first name</div>
<div class="display-field">Dan</div>
<div class="display-label">last name</div>
<div class="display-field">M</div>
<div class="display-label">email</div>
<div class="display-field">danm@fakedomain.com</div>

هذا لديه درجة عاادية من المرونة. إذا قمت بإنشاء فئات CSS display-label و display-field, ، يمكنك أن تفعل قليلا جدا، ولكن ماذا لو كنت أرغب في تغييره إلى شيء مثل هذا؟

<p>
  <span class="display-label">first name</span>:
  <span class="display-field">Dan</span>
</p>
<p>
  <span class="display-label">last name</span>:
  <span class="display-field">M</span>
</p>
<p>
  <span class="display-label">email</span>:
  <span class="display-field">danm@fakedomain.com</span>
</p>

لاحظ أن أزواج قيمة السمة الآن تظهر الآن جنبا إلى جنب (بدلا من خطوط منفصلة) وهناك قولون بعد كل سمة.

هل هناك أي طريقة لإنشاء قالب مخصص سيتم تكراره لكل زوج قيمة السمة عند عرض تفاصيل سقالة؟

أنا لا أتحدث عن قالب معين لنموذج (على سبيل المثال، أ Person قالب) أو قالب خاصية معينة (على سبيل المثال، EmailAddress نموذج). أريد شيئا يتيح لي أن أصف كيف يبدو زوج قيمة السمة، ثم DispalyFor() يجب تكرار هذا القالب تلقائيا لكل خاصية في النموذج الخاص بي أو عرض النموذج.

هل كانت مفيدة؟

المحلول

ماذا عن تجاوز Object قالب، على سبيل المثال

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
    <% if (ViewData.TemplateInfo.TemplateDepth > 3) { %>
        <%= ViewData.ModelMetadata.SimpleDisplayText %>
    <% } else { %>
        <table>
        <% foreach (ModelMetadata prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForDisplay && !ViewData.TemplateInfo.Visited(pm))) { %>
            <% if (prop.HideSurroundingHtml) { %>
                <%= Html.Display(prop.PropertyName) %>
            <% } else { %>
                <tr>
                    <td>
                        <div class="display-label" style="text-align: right;">
                            <%= Html.Label(prop.PropertyName) %>
                        </div>
                    </td>
                    <td>
                        <div class="display-field">
                            <%= Html.Display(prop.PropertyName) %>
                            <%= Html.ValidationMessage(prop.PropertyName, "*") %>
                        </div>
                    </td>
                </tr>
            <% } %>
        <% } %>
        </table>
    <% } %>

يرى http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top