Могу ли я передать экземпляр класса пользовательскому элементу управления через внешний интерфейс страницы / элемента управления в ASP.Net? - PullRequest
1 голос
/ 07 марта 2012

У меня есть пользовательский элемент управления, который я добавляю на страницу через интерфейс (не обратно). У этого пользовательского пользовательского элемента управления есть свойство типа пользовательского класса. Я хотел бы установить это свойство через объявление пользовательского элемента управления на внешнем интерфейсе.

Вот код, который поможет вам понять, о чем я говорю:

В пользовательском элементе управления .cs:

public BaseTUDSectionControl parentSectionControl
{
   get;
   set;
}

И при объявлении экземпляра этого пользовательского элемента управления:

<tud:TUDDropDown ID="tddAccountExecutive" runat="server" />

Я хотел бы установить свойство parentSectionControl в той же строке, например:

<tud:TUDDropDown parentSectionControl=someClassInstance
       ID="tddAccountExecutive" runat="server" />

где 'someClassInstance' - это экземпляр класса, который существует ... да. Я думаю, что поступаю неправильно, но я не знаю, как еще это сделать. Я не хочу делать это на бэкэнде по причинам обслуживания, так как в моем проекте будут добавлены сотни подобных пользовательских элементов управления.

Возможно ли что-нибудь подобное или я что-то курю?

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Я не уверен, если / когда Microsoft добавила эту функциональность в ASP.NET, но на самом деле можно задать свойство неосновного типа в коде переднего плана:

TestPage.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestPage.aspx.cs" Inherits="TestPage" %>

<%@ Register Src="~/Control.ascx" TagPrefix="custom" TagName="Control" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>Test Page</title></head>
<body>

    <custom:Control ID="TestControl" Items='<%# Items %>' runat="server" />

</body>
</html>

TestPage.aspx.cs:

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

public partial class TestPage : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        TestControl.DataBind();
    }

    protected List<string> Items = new List<string>() { "Hello", "world!", };
}

Control.ascx:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Control.ascx.cs" Inherits="Control" %>

<asp:Repeater ID="Repeater" ItemType="System.string" runat="server">
    <ItemTemplate>
        <p><%# Item %></p>
    </ItemTemplate>
</asp:Repeater>

Control.ascx.cs:

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

public partial class Control : UserControl
{
    public List<string> Items { get; set; }

    protected override void OnPreRender(EventArgs e)
    {
        Repeater.DataSource = Items;
        Repeater.DataBind();
    }
}

Примечание: важно связать элемент управления со страницы, которая устанавливает свойство .Таким образом, вам все еще нужна строка в code-behind, но вы все еще получаете преимущества читабельности установки свойства в code-front.

0 голосов
/ 07 марта 2012

Нет, это невозможно. Вы можете установить свойства базовых типов (int, string, bool) и т. Д. Только из разметки (то, что вы называете front-end). Если у вас есть свойство, которое должно быть установлено для экземпляра класса, это должно быть сделано в коде (то, что вы называете back-end).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...