احصل على قيمة من الويب.إعدادات تطبيق التكوين في ASP.NET العلامات

StackOverflow https://stackoverflow.com/questions/6073914

سؤال

قد أكون خارج المسار تماما الآن, لذلك سأطلب هذا هنا حتى يتمكن شخص ما من مساعدتي.

ما أريد القيام به ، هو إدراج قيمة من الويب الخاص بي.التكوين ، المخزنة في منطقة أبليكاتيونسيتينغز ، في بلدي أسبكس الترميز.على وجه التحديد أريد أن ريد ورل من التكوين.هذا هو إعداد التكوين الذي أستخدمه

<configSections>  
<sectionGroup name="applicationSettings"  type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=123456">
  <section name="MyApp.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=12345" requirePermission="false" />
</configSections>

في وقت لاحق في هذا الملف هي الإعدادات الفعلية مثل ذلك:

<applicationSettings>
<MyApp.Properties.Settings>
  <setting name="ImagesUrl" serializeAs="String">
    <value>http://resources/images/</value>
  </setting>

الآن أريد أن أشير إلى القيمة أعلاه في الترميز مثل هذا:

 <asp:Image ID="Image1" runat="server" ImageUrl="<%$AppSettings:ImagesUrl%>/Image1.jpg

أعلم أن هناك تعبيرا متاحا <٪ App إعدادات التطبيقات:إيماجيسورل ٪ > ، ولكن أنا لا تستخدم أبسيتينغز جزء من شبكة الإنترنت.التكوين ، بدلا من التكوين.

تحرير:وأعتقد أنني يمكن أن تفعل ذلك فقط مع إكسبريسيونبويلدر ، لأن لدي لسلسلة سلسلة مع اسم الصورة الفردية.لقد غيرت المثال أعلاه لتعكس ذلك.

أنا أحب حل كود بيرت سميث أدناه للوصول إلى قسم التكوين ، فقط أحتاج إلى وضعه في منشئ التعبير.أنا عالقة في تجاوز طريقة جيتكوديكسبريسيون من حيث أود أن استدعاء مدير التكوين ، ولكن أنا لا أفهم كيفية بناء تعبير المعلمات.

public class SettingsExpressionBuilder: ExpressionBuilder
{
    public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
    {
        return ??
    }

تحرير
والنتيجة تبدو مثل هذا ، ويعمل لجميع أنواع الملفات ، وليس فقط الصور:

<asp:ScriptReference Path='<%$Code:GetAppSetting("ResourcesUrl","JS/jquery/jquery.jqplot.js")%>'

وأنا ببساطة استخدمت المثال من مايكروسوفت لإرجاع أي نوع من التعليمات البرمجية من منشئ التعبير:

إرجاع رموز جديدةمقتطفالتعبير (دخول.التعبير);

و جيتابسيتينغ هو طريقة في بلدي فئة الصفحة المخصصة.

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

المحلول

عادة ما تقوم بإنشاء فئة إعدادات مخصصة لقراءة هذه القيم على النحو التالي آرتيكال يصف.شخصيا ، أود فقط استخدام أبستينغز كما هو مقترح أعلاه لأن هذا هو وظيفة القائمة وما تفعل الخاص بك على السطح يبدو كافيا.

ومع ذلك ، لا يعرفون الظروف الخاصة بك ، ما محاولة القيام به يمكن حلها دون إعدادات مخصصة مثل ذلك:

في التعليمات البرمجية وراء أنا خلقت وظيفة محمية لاسترداد الإعداد

protected string GetCustomSetting(string Section, string Setting)
{
    var config = ConfigurationManager.GetSection(Section);

    if (config != null)
        return ((ClientSettingsSection)config).Settings.Get(Setting).Value.ValueXml.InnerText;

    return string.Empty;
}

ثم في ترميز أسبكس أسمي هذه الوظيفة

<div>
    <label runat="server" id="label"><%=GetCustomSetting("applicationSettings/MyApp.Properties.Settings", "ImagesUrl") %></label>
</div>

نأمل أن يساعد هذا.

متابعة:

سوف كوديكسبريسيون تبدو شيئا من هذا القبيل:

public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
{
    var config = ConfigurationManager.GetSection("applicationSettings/MyApp.Properties.Settings");
    return new CodePrimitiveExpression(((ClientSettingsSection)config).Settings.Get(entry.Expression).Value.ValueXml.InnerText);
}

في اختباري ، أنا خلقت فئة تسمى CustomSettingsExpressionBuilder وأضفه إلى مجلد رمز التطبيق.وأضاف التكوين للعرف اكسبرس على شبكة الإنترنت.التكوين ودعا من أسبكس مثل ذلك:

<asp:Label ID="Label1" runat="server" Text="<%$CustomSettings:ImagesUrl %>"></asp:Label>

نصائح أخرى

هل يجب أن يكون في وضع علامة؟لماذا لا تحددها في الكود الخلف.

giveacodicetagpre.

طريقة أخرى ستحدد عقار أو طريقة ثابتة في التعليمات البرمجية الخاصة بك، ثم استخدام ذلك في العلامة.

لست متأكدا من ASP.NET قليلا من ذلك ، ولكن إذا كان هذا الرمز العادي كنت تفعل MyApp.Properties.Settings.Default.ImagesUrl, ، لذا حاول

<asp:Image ID="Image1" runat="server" 
           ImageUrl="<%$MyApp.Properties.Settings.Default.ImagesUrl%>

سيكون من الأسهل بالتأكيد تخزين هذا في <appSettings> رغم ذلك.

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