Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
FormView и Сustom Сontrol
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Создал контрол предназначенный для упрощения рутиного форматирования. По сути, он помещает контент в 2 вложенных DIVа (<div><div>..контент..</div></div>). При использовать его в FormView есть сложности. При первом заходе на страницу данные отображаются без проблем. Но при вызове updatе ObjectDataSource не межет иизвлечь данные из TextBoxа, вложенного в этот контрол. В итоге получею сообщени об ошибке : "Value cannot be null. Parameter name: Name". ASP — код: <asp:FormView runat="server" DataKeyNames="Id" ...> .... <EditItemTemplate> <ui:TestControl runat="server" ID="tc1"> <ETag> <asp:TextBox ID="NameTextBox" runat="server" Text='<%# Bind("Name") %>' /> </ETag> </ui:TestControl> <EditItemTemplate> </asp:FormView> Код контрола: namespace UI { [ToolboxItem(true)] [ParseChildren(true)] [ConstructorNeedsTag(false)] public class TestControl : HtmlGenericControl { private EmbeddedTag _embeddedTag; [PersistenceMode(PersistenceMode.InnerProperty)] public EmbeddedTag ETag { get { this.EnsureChildControls(); return _embeddedTag; } } protected override void CreateChildControls() { base.CreateChildControls(); _embeddedTag = new EmbeddedTag(); this.Controls.Add(_embeddedTag); } public TestControl() : base("div") { this.Style.Add("border", "1px solid blue"); } } [ToolboxItem(false)] [ParseChildren(false)] [ConstructorNeedsTag(false)] public class EmbeddedTag : HtmlGenericControl { public EmbeddedTag() : base("div") { this.Style.Add("border", "1px solid red"); } } } При этом следующий код работает без проблем, хотя, по моему мнению, это та же сруктура контролов: <asp:FormView runat="server" DataKeyNames="Id" ...> <EditItemTemplate> <div runat="server" style="..."> <div runat="server" style="..."> <asp:TextBox ID="NameTextBox" runat="server" Text='<%# Bind("Name") %>' /> </div> </div> <EditItemTemplate> </asp:FormView> Посоветуйте, как решить эту проблему, а то у меня все варианты кончились :maniac:. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2006, 13:21 |
|
||
|
FormView и Сustom Сontrol
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, <Аноним>, Вы писали: А>Доброго времени суток! А>Создал контрол предназначенный для упрощения рутиного форматирования. По сути, он помещает контент в 2 вложенных DIVа (<div><div>..контент..</div></div>). При использовать его в FormView есть сложности. При первом заходе на страницу данные отображаются без проблем. Но при вызове updatе ObjectDataSource не межет иизвлечь данные из TextBoxа, вложенного в этот контрол. В итоге получею сообщени об ошибке : "Value cannot be null. Parameter name: Name". Реализуй System.Web.UI.IStateManager... << RSDN@Home 1.2.0 alpha rev. 655>> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2006, 14:19 |
|
||
|
FormView и Сustom Сontrol
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, RustM, Вы писали: RM>Реализуй System.Web.UI.IStateManager И как это должно помочь? Я же наследуюсь от HtmlGenericControl и механизм работы ViewState в нем реализован (от HtmlContainerControl). Кроме того, если всеже вставить приведенный ниже код и пробежаться по нем debugeром, то оказывается, что ни один метод данного интерфейса не вызывается. #region IStateManager Members bool IStateManager.IsTrackingViewState { get { return base.IsTrackingViewState; } } void IStateManager.LoadViewState(object state) { base.LoadViewState(state); } object IStateManager.SaveViewState() { return base.SaveViewState(); } void IStateManager.TrackViewState() { base.TrackViewState(); } #endregion ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2006, 16:08 |
|
||
|
FormView и Сustom Сontrol
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, <Аноним>, Вы писали: А>Здравствуйте, RustM, Вы писали: HtmlGenericControl уже реализует интерфейс как ты сам сказал, поэтому тебе нужно лишь просто переопределить соответствующие методы и дополнить чуточку. Думаю легче показать, чем объяснять. Где-то так. ... protected override void LoadViewState(object savedState) { Pair pair = (Pair)savedState; if (savedState == null) { base.LoadViewState(savedState); } else { base.LoadViewState(pair.First); if (pair.Second != null) ((IStateManager)ETag).LoadViewState(pair.Second); } } protected override object SaveViewState() { Pair pair = new Pair(); pair.First = base.SaveViewState(); if (_embeddedTag != null) pair.Second = ((IStateManager)_embeddedTag).SaveViewState(); if (pair.First != null && pair.Second != null) return pair; return null; } protected override void TrackViewState() { base.TrackViewState(); if (_embeddedTag != null) ((IStateManager)_embeddedTag).TrackViewState(); } ... Ключевые моменты я выделил. И потом подружись с MSDN и поиском :)... << RSDN@Home 1.2.0 alpha rev. 655>> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2006, 19:02 |
|
||
|
|

start [/forum/topic.php?fid=18&fpage=914&tid=1390988]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
23ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
25ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 307ms |

| 0 / 0 |
