質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

6211閲覧

リスト型ユーザーコントロールの作成

syogakusya

総合スコア67

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2016/06/28 10:44

###前提・実現したいこと
.NET Framework4.0で、独自の<ul>要素を出力する簡単なユーザーコントロールを作成したいです。

<ul>要素に対応するUnorderedクラスと、<li>要素に対応するMyListitemクラスを作成しました。 UnorderedクラスのControlsプロパティを取得し、そのオブジェクトのAddメソッドにMyListitemクラスのインスタンスを渡すことで実現できると考えていたのですが、出力されるhtmlを見てみると<ul>要素に子要素が追加されていませんでした。 この<ul>要素に<li>要素を追加したいです。 よろしくお願いします。

###該当のソースコード

言語:C# , html(html5) ※WebForm1.aspxファイルをブラウザ上で表示しました。 ※各ユーザーコントロールのascx.csファイルに関しては、テンプレートによって作成されたままの状態です。 1.Unordered.ascx <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Unordered.ascx.cs" Inherits="Problem.Unordered" %> <ul class="ul"> </ul> 2.MyListitem.ascx <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MyListitem.ascx.cs" Inherits="Problem.MyListitem" %> <li class="li"> <div class="first"> <asp:Label runat="server" ID="labelFirst"></asp:Label> </div> <div class="second"> <asp:Label runat="server" ID="labelSecond"></asp:Label> </div> </li> 3-1.WebForm1.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Problem.WebForm1" %> <%@ Register TagPrefix="uc" TagName="Unordered" Src="~/Unordered.ascx" %> <%@ Register TagPrefix="uc" TagName="MyListitem" Src="~/MyListitem.ascx" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <uc:Unordered runat="server" ID="Unordered" /> </div> </form> </body> </html> 3-2 WebForm1.aspx.cs using System; namespace Problem { public partial class WebForm1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // <li>要素を挿入 Unordered.Controls.Add(new MyListitem()); } } }

###試したこと

WebForm1.aspx上でuc:Unordered要素を開始・終了タグに分け、中に直接uc:MyListitem要素を挿入してみましたが、「要素'Unordered'に対しては、開始タグと終了タグの間でコンテンツを使用できません。」といったエラーメッセージが表示されました。これをヒントに少し調べてみたのですが、クラスそのものを親要素として定義するような方法が分かりませんでした。また、それらしき基本クラスを発見することはできたのですが、UserControlクラスを継承しているため利用することができませんでした。出来ることならユーザーコントロールとして作成したいと考えております。出力されるhtmlをascxファイル上で編集できたり、サーバーコントロールを利用できたりする点が便利だからです。また、MyListitemクラスの<li>要素を<div>要素でラップし、その<div>要素をサーバーコントロール化してinnerHTMLプロパティを取得してみたり(もはやサーバーコントロールのコンセプトを逸脱していますが)しましたが、これも上手くいきませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

自分なら、ユーザーコントロールでリピーターつかうかなぁ、最近はMVCの方ばっかりです。

まず、配置したコントロールにIDつけて

c#

1<ul class="ul" id="ul1" runat="server"> 2</ul>

で、ページに配置したユーザーコントロールにほかのコントロールを追加は

C#

1var control = (MyListitem)LoadControl("~/MyListitem.ascx"); 2control.ID ="id0001"; 3Unordered.FindControl("ul1").Controls.Add(control); 4

一応こうやればという方法ですが、なんか変でしょ。これはお薦めしません。

投稿2016/06/29 01:12

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syogakusya

2016/06/29 09:59

やろうと思っていた方法で実現することができました。 Repeaterクラスについても学ぶ機会をいただき、そちらでも実現できました。 おっしゃるとおり、Repeaterクラスを使った方法のほうがより合理的だと思いました。 業務ではRepeaterクラスを使って実装を行うことにします。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問