Доступ к внутреннему значению ASP.NET Web User Control - PullRequest
2 голосов
/ 31 марта 2010

Удивлен, что я не смог найти это сам, но все равно. Допустим, я использую свой пользовательский веб-элемент управления следующим образом:

<myprefix:mytag userid="4" runat="server">Some fancy text</myprefix:mytag>

Как бы я мог получить доступ к тексту внутри тегов из его кода («Необычный текст»)? Ожидал, что это будет разоблачено через это. Текст, это. Значение или что-то подобное.

EDIT: Я даже получаю следующее предупреждение на странице, где я пытаюсь использовать его: Содержимое не допускается между открывающим и закрывающим тегами для элемента 'mytag'.

EDIT2:

public partial class mytag: UserControl
{
    public int ItemID { get; set; }
    protected void Page_Load(object sender, EventArgs e)
    {           
    }
}

Ответы [ 2 ]

9 голосов
/ 31 марта 2010

Я предполагаю, что ваш пользовательский элемент управления имеет свойство Text типа string. Если затем вы объявите, что это свойство имеет постоянный режим «InnerDefaultProperty», вы должны получить то, что ищете.

Е.Г.

/// <summary>
/// Default Text property ("inner text" in HTML/Markup)
/// </summary>
[PersistenceMode(PersistenceMode.InnerDefaultProperty)]
public string PropertyTest
{
    get
    {
        object o = this.ViewState["Text"];
        if (o != null)
        {
            return (string)o;
        }
        return string.Empty;
    }
    set
    {
        this.ViewState["Text"] = value;
    }
}

Edit: Чтобы избежать «буквального содержимого, не разрешенного», вы должны помочь анализатору, добавив [ParseChildren(true, "PropertyTest")] к определению class (см. MSDN ).

И, конечно, вам нужно свойство для записи (т.е. для него нужен установщик, который я опускал для краткости).

0 голосов
/ 27 мая 2015

Просто добавьте одну строку перед классом ([ParseChildren (true, "TestInnerText")]) и добавьте свойство с именем "TestInnerText". Создайте любой элемент управления по вашему выбору, я создал LiteralControl только для отображения внутреннего представления HTML.

«TestInnerText» - это только временное имя, которое я дал, вы можете использовать любое имя свойства по вашему выбору.

[ParseChildren(true, "TestInnerText")]
public partial class mytag : UserControl
{
    public string TestInnerText
    {
        set
        {
            LiteralControl lc=new LiteralControl();
            lc.Text=value;
            this.Controls.Add(lc);
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...