ASP.NET :ملزمة مربع نص maxlength إلى الدرجة المستمر في HTML

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

  •  05-07-2019
  •  | 
  •  

سؤال

أنا محاولة للسماح مصممي الويب على استخدام البيانات الوصفية لدينا قاعدة بيانات الحقول في asp.net الصفحات التي تقوم بإنشائها.الأكثر وضوحا هو على النحو التالي:

<asp:TextBox runat="server" id="txTextBox" MaxLength="<Value From Metadata here>" ... />

كل المطلوب يتم تخزين البيانات الوصفية في فئة الأشياء يمكن الوصول إليها نظرا العامة طبيعة ثابتة.

الاستفادة من هذا يكون أن يمكن تعيين القيم التي

أ) قد تتغير دون علم أو رعاية
ب) تحسين تجربة المستخدم مع القليل جدا من الجهد الترميز

و كل ذلك دون الحاجة إلى القلق حول ما قيمة حيث أنها تأتي من.وهذا سوف يكون في المقام الأول تستخدم تلقائيا عناصر تحكم منضمة - أيتلك التي تضاف مع القليل أو لا المطور التفاعل.

هذا السؤال هي مشابهة جدا واحد من الأسئلة السابقة الذي يعمل الآن بشكل رائع (لكن هذا كان في WPF / XAML ).

النقطة الرئيسية في هذا السؤال هو أنني أريد القليل من المطور الشرط على هذا النحو من الممكن - من الناحية المثالية سيكون هناك بعض <%# Constant.Value %> نوع الجملة التي يمكن استخدامها مباشرة في Maxlength="" السمة asp:Textbox التحكم وهذا يعني أن أي قانون يجب أن تضاف إلى صفحة/usercontrol على الإطلاق.

لدي شعور أنه ليس من الممكن, ولكن أنا أحب شخص أن يثبت لي خطأ.

تا

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

المحلول

يمكنك استخدام ربط البيانات التعبير:

<asp:TextBox MaxLength="<%# Constant.Value %>" />

ولكن, هذا يتطلب أن يكون في عنصر تحكم ربط بيانات.إذا لم يكن مكرر أو somesuch, سوف تحتاج إلى الاتصال الحاوية.DataBind() في بعض نقطة في صفحة حياة.

بدلا من ذلك ، يمكن إنشاء ExpressionBuilder والتي من شأنها أن تسمح جملة مثل:

<asp:TextBox MaxLength="<%$ Constants:Value %>" />

هنا عينة التي سوف تسحب من ثابت واحد القاموس:

using System;
using System.Web.UI;
using System.Web.Compilation;
using System.CodeDom;
using System.Collections.Generic;

class ConstantsExpressionBuilder : ExpressionBuilder {
   private static readonly Dictionary<string, object> Values = 
      new Dictionary<string, object>() {
         { "Value1", 12 },
         { "Value2", false },
         { "Value3", "this is a test" }
      };

   public override bool SupportsEvaluate { get { return true; } }

   public override object EvaluateExpression(object target, BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) {
      string key = entry.Expression.Trim();
      return GetValue(key);
   }

   public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) {
      CodePrimitiveExpression keyExpression = new CodePrimitiveExpression(entry.Expression.Trim());
      return new CodeMethodInvokeExpression(this.GetType(), "GetValue", new CodeExpression[] { keyExpression });       
   }

   public static object GetValue(string key) {
      return Values[key];
   }
}

كنت التسجيل في شبكة الإنترنت.التكوين:

<system.web>
   <compilation>
      <expressionBuilders>
    <add expressionPrefix="Constants" type="ConstantsExpressionBuilder" />
      </expressionBuilders>
   </compilation>
</system.web>

و يطلق عليه في صفحة ASPX:

<asp:Textbox runat="server" MaxLength="<%$ Constants:Value1 %>" ReadOnly="<%$ Constants:Value2 %>" Text="<%$ Constants:Value3 %>" />

التي يجب أن تنتج:

<input type="text" maxlength="12" readonly="false" value="this is a test" />

في إخراج HTML.

نصائح أخرى

أعتقد أن عليك أن تكون قادرة على القيام بذلك مع شيء من هذا القبيل

<asp:TextBox runat="server" id="txTextBox" MaxLength="<%=Constants.SomeValue%>" />

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

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