سؤال

كيف يمكنني التمسك بتنسيق HTML في كائن سلسلة في C#؟

هذا ما لدي:

c.DepartmentAbbr.ToString() + " - (" + c.DepartmentName.ToString() + ")"

حيث C.Departmentabbr.ToString () و C.DepartmentName.toString () كلاهما يحددان من سياق بيانات باستخدام LINQ.

هذا ما أريده بشكل أساسي:

"<b>" + c.DepartmentAbbr.ToString() + "</b> - (" + c.DepartmentName.ToString() + ")"

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

تحديث

فيما يلي بعض التفاصيل الإضافية التي لم أكن أعتقد أنها مهمة ولكني أعتقد الآن أنها يجب أن تكون كذلك.

ها هو التحكم الذي أستخدمه. رمز ASPX:

 <telerik:RadComboBox ID="rcbDepartments" runat="server" AppendDataBoundItems="True"
        AutoPostBack="true" NoWrap="true" Width="250px">
        <Items>
            <telerik:RadComboBoxItem Text="All Departments" Value="-1" />
        </Items>
    </telerik:RadComboBox>

وأضيف عناصر إلى عنصر التحكم هذا باستخدام LINQ في C#:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        var abbr = from c in DB.Departments
                   where c.DepartmentAbbr != "BInst"
                   select c;

        foreach (var c in abbr)
        {
            String s = String.Format("{0} - ({1})", c.DepartmentAbbr, c.DepartmentName);
            rcbDepartments.Items.Add(new RadComboBoxItem(s, c.DepartmentID.ToString()));
        }
    }
}

يقبل كائن RadComboboxitem إما () ، (نص السلسلة) ، أو (نص السلسلة ، قيمة السلسلة) ، وأنا أستخدم الأخير.

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

المحلول 6

نظرًا لأنني بحثت أكثر فأكثر ، فقد توصلت إلى حد كبير إلى أن ما أريد فعله غير ممكن. أنا أستخدم RadCombobox لتثبيت العناصر فيها ، لكنني مضطر إلى القيام ببعض الأشياء funcky مع LINQ على جانب الخادم بحيث لا بد لي من التمس .سلسلة. شكرًا لكم جميعًا على مساعدتكم وتعليقاتك ، لكنني أعتقد أنني سأضطر فقط إلى القيام بما لدي في هذه الحالة.

فيما يلي بعض التفاصيل الإضافية التي لم أكن أعتقد أنها مهمة ولكني أعتقد الآن أنها يجب أن تكون كذلك.

ها هو التحكم الذي أستخدمه. رمز ASPX:

وأنا أقوم بإضافة عناصر إلى عنصر التحكم هذا باستخدام LINQ في C#: void page_load المحمي (مرسل الكائن ، EventArgs e) {if (! Ispostback) {var abbr = from c in db.departments حيث c.departmentabbr! = "binst" حدد ج.

        foreach (var c in abbr)
        {
            String s = String.Format("{0} - ({1})", c.DepartmentAbbr, c.DepartmentName);
            rcbDepartments.Items.Add(new RadComboBoxItem(s, c.DepartmentID.ToString()));
        }
    }
}

يقبل كائن RadComboboxitem إما () ، (نص السلسلة) ، أو (نص السلسلة ، قيمة السلسلة) ، وأنا أستخدم الأخير. أنا متأكد من الآن أنه نظرًا للقيود المفروضة على RadComboboxitem فقط قبول السلاسل التي لا يمكنني القيام بتنسيق HTML على العناصر دون استخدام علامات قالب العنصر في ASPX. لسوء الحظ بالنسبة لموقفي ، لا يمكنني القيام بذلك لأن ذلك كان يسبب بالفعل بعض المشكلات الأخرى بالنسبة لي ولماذا أفعل ما أحاول حاليًا القيام به.

نصائح أخرى

String.Format("<b>{0}</b> - ({1})", c.DepartmentAbbr, c.DepartmentName)

فيما يلي إشارة رائعة إلى تنسيق السلسلة في C#:

http://blog.stevex.net/string-formatting-in-csharp/

لأي شخص يحاول القيام بذلك في ASP.NET MVC...

هذا لا يعمل:

<%=String.Format(resourceString, "<b>" & Model.UserName & "</b>")%>

العلامات الجريئة مشفرة HTML ، كما تتوقع.

ومع ذلك ، هذا يعمل علاج:

<%=String.Format(resourceString, MvcHtmlString.Create("<b>" & Model.UserName & "</b>")%>
MvcHtmlString s = MvcHtmlString.Create(String.Format("{0} - ({1})", c.DepartmentAbbr, c.DepartmentName));

أعتقد أنه من الأفضل أن تغير السلسلة S إلى كائن MVCHTMLSTRING.

أعتقد أنك تبحث عن طريقة للحصول على الكائن c لبصق سلسلة تنسيق HTML.

خذ هذا كمثال:

public class myExample : IFormattable{
   private string myExampleStr;
   public myExample(string sampleStr){
      this.myExampleStr = sampleStr;
   }

   /* Implement an Equals() function - OVERRIDE! */
   public override bool Equal(object obj){
      return true;
   }

   /* Implement an ToString() function - OVERRIDE */
   public override string ToString(){
      return this.myExampleStr;
   }

   /* Implement an GetHashCode() function - OVERRIDE */
   public override int GetHashCode(){
      return this.myExampleStr.GetHashCode();
   }

   /* Here we implement the IFormattable interface */
   public string ToString(string format) {
      return this.ToString(format, null);
   }

   public string ToString(IFormatProvider formatProvider) {
      return this.ToString(null, formatProvider);
   }

   public string ToString(string format, IFormatProvider formatProvider) {
      if (string.IsNullOrEmpty(format)) format = "G";
      if (formatProvider != null) {
         ICustomFormatter formatter = formatProvider.GetFormat(this.GetType()) as ICustomFormatter;
         if (formatter != null)
            return formatter.Format(format, this, formatProvider);
      }
      switch (format) {
         case "b": return string.Format("<b>{0}</b>", this.myExampleStr);
         case "i": return string.Format("<i>{0}</i>", this.myExampleStr);
         default: return this.myExampleStr;
      }
   }
}

ونفترض أننا قمنا بتثبيت هذا الفصل مثل هذا:

myExample example = new myExample("tommieb75");

وإصدار بسيط ToString() اتصل على الكائن لطباعة علامة HTML لـ BOLD كما هو موضح أدناه

Console.WriteLine("{0}", example.ToString("b"));
// Output would be <b>tommieb75</b>

يعمل هذا المثال على توضيح كيفية استخدام معلمة مخصصة إلى ToString() الطريقة حتى تتمكن من استخدام علامات HTML BOLD أو ITALIC المدمجة ، أو أي طريقة أخرى لتنسيق قيمة بناءً على المعلمة المستخدمة في ToString وظيفة هذه الفئة.

هل هذا يجيب علي سؤالك؟

أعتقد أن المشكلة في مكان آخر. هل تضع هذه السلسلة في عنصر تحكم في الملصقات أم عنصر تحكم حرفي؟ إذا كانت علامة ، أعتقد أنها تفلت من النص لك. ضعه في ASP: التحكم الحرفي بدلاً من ذلك. وبالمناسبة ، لا تحتاج إلى الاتصال. toString () كثيرًا. يمكنك فقط استخدام:

"<b>" + c.DepartmentAbbr + "</b> - (" + c.DepartmentName + ")"

وسيتم استدعاء ToString () بشكل أساسي.

إذا كنت تقوم بإخراج هذا على صفحة ويب - حاول استخدام:

Server.HtmlEncode(string)
Server.HtmlDecode(string)

أساليب.

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