Asp.net 사용자 정의 컨트롤 의 단일 선택,다 중 선택 컨트롤
자주 사용 하 는 jquery 플러그 인 을 컨트롤 로 패키지 하 는 것 도 좋 은 선택 입 니 다.
먼저 효과 보기:
1.라 이브 러 리 항목 을 새로 만 들 고 데이터 원본 클래스 를 만 듭 니 다.
[Serializable]
public class Select2Item
{
public bool Selected { get; set; }
public string Text { get; set; }
public string Value { get; set; }
public Select2Item() { }
public Select2Item(string text, string value)
{
this.Text = text;
this.Value = value;
}
public Select2Item(string text, string value, bool selected)
{
this.Text = text;
this.Value = value;
this.Selected = selected;
}
}
2.컨트롤 클래스 CheckList 를 만 들 고 WebControl 을 계승 하 며 Public List3.스 크 립 트 파일 및 스타일 파일 도입
a.스 크 립 트 나 스타일 파일 을 만 들 고 파일 의 속성 을 설정 합 니 다.-생 성 작업-끼 워 넣 은 자원
b.namespace 에 태그[assembly:WebResource("네 임 스페이스.폴 더 이름.파일 이름","mime 형식")를 추가 해 야 합 니 다.]
예:
[assembly: WebResource("Control.Style.checklist.css", "text/css",PerformSubstitution = true)]
[assembly: WebResource("Control.Scripts.checklist.js", "application/x-javascript")]
css 파일 에 그림 이 존재 한다 면 그림 을 끼 워 넣 은 자원 으로 설정 합 니 다.css 에 서 는<%=WebResource("네 임 스페이스.폴 더 이름.파일 이름")%>
PerformSubstitution 은 삽입 식 자원 의 처리 과정 에서 다른 웹 자원 URL 을 분석 하고 이 자원 의 전체 경 로 를 대체 할 지 여 부 를 나타 낸다.
c.protected override void OnPreRender(EventArgs e)를 다시 쓰 고 끼 워 넣 은 스 크 립 트 나 스타일 파일 을 도입 합 니 다.
if(Page!=null)Page.Header.Control.Add(LiteralControl),
protected override void OnPreRender(EventArgs e)
{
if (this.Page != null)
{
StringBuilder sbb = new StringBuilder();
sbb.Append(string.Format(STYLE_TEMPLATE, Page.ClientScript.GetWebResourceUrl(this.GetType(), "HandControl.Style.checklist.css")));
sbb.Append(string.Format(SCRIPT_TEMPLATE, Page.ClientScript.GetWebResourceUrl(this.GetType(), "HandControl.Scripts.checklist.js")));
bool hascss = false;
LiteralControl lcc = new LiteralControl(sbb.ToString());
lcc.ID = "lccheck";
foreach (Control item in Page.Header.Controls)
{
if (item.ID == "lccheck")
hascss = true;
}
if (!hascss)
Page.Header.Controls.Add(lcc);
}
base.OnPreRender(e);
}
4.컨트롤 을 다시 쓰 는 proctected override void Render(HtmlTextWriter writer)방법여 기 는 주로 렌 더 링 컨트롤 의 html 입 니 다.컨트롤 에 따라 결 정 됩 니 다.
protected override void Render(HtmlTextWriter writer)
{
if (Items.Count > 0)
{
writer.Write("<div id='div" + this.ClientID + "' class='c01-tag-div' mul='" + (Multiple == true ? "1" : "0") + "'>");
if (Multiple == false)
writer.Write("<input name='tb" + this.ClientID + "' type='hidden' value='" + Items[0].Value + "' />");
else
writer.Write("<input name='tb" + this.ClientID + "' type='hidden' />");
bool first = true;
foreach (var item in Items)
{
if (Multiple == false)
{
if (item.Selected && first)
{
writer.Write("<a title='" + item.Text + "' class='c01-tag-item c01-tag-select' val='" + item.Value + "' tag='Y'>" + item.Text + "</a>");
first = false;
}
else
{
writer.Write("<a title='" + item.Text + "' class='c01-tag-item' val='" + item.Value + "' tag='N'>" + item.Text + "</a>");
}
}
else
{
if (item.Selected)
writer.Write("<a title='" + item.Text + "' class='c01-tag-item c01-tag-select' val='" + item.Value + "' tag='Y'>" + item.Text + "</a>");
else
writer.Write("<a title='" + item.Text + "' class='c01-tag-item' val='" + item.Value + "' tag='N'>" + item.Text + "</a>");
}
}
writer.Write("</div>");
}
}
5.GetSelected 방법 을 추가 하고 List
public List<Select2Item> GetSelected()
{
if (Page != null)
{
var values = Page.Request.Form["tb" + this.ClientID].Split(',');
var res = Items.Where(t => values.Contains(t.Value)).ToList();
foreach (var item in Items)
{
if (res.Contains(item))
{
item.Selected = true;
}
else
{
item.Selected = false;
}
}
return res;
}
else
{
return null;
}
}
public string GetSelectValue()
{
if (Page != null)
{
return Page.Request.Form["tb" + this.ClientID];
}
return "";
}
6.저장 상태proctected override object SaveView State(),proctected override void LoadView State(object saved State)를 다시 써 야 합 니 다.Items 데이터 항목 속성 을 ViewState 에 저장 하 는 데 목적 을 둡 니 다.
protected override object SaveViewState()
{
var valuestr = Page.Request.Form["tb" + this.ClientID];
if (!string.IsNullOrEmpty(valuestr))
{
var values = valuestr.Split(',');
var temp = Items.Where(t => values.Contains(t.Value)).ToList();
foreach (var item in temp)
{
item.Selected = true;
}
}
return new object[] { base.SaveViewState(), Items };
}
protected override void LoadViewState(object savedState)
{
object[] vState = (object[])savedState;
if (vState[0] != null)
base.LoadViewState(vState[0]);
if (vState[1] != null)
Items = (List<Select2Item>)vState[1];
}
7.단선 과 복선 설정,js 에서 제어속성 추가
[설명("가 져 오기 및 설정 다 중 선택"),DefaultValue(true),Browsable(true),Category("잡다 한 항목")]
public bool Multiple { get; set; }
OnPreRender 코드 에서 Multiple 속성 이 div 의 mul 속성 값 에 영향 을 미 치 는 것 을 발견 하여 다 중 선택 여 부 를 판단 합 니 다(기본 다 중 선택)
8.기타 설명
private static readonly string STYLE_TEMPLATE = "\r";
private static readonly string SCRIPT_TEMPLATE = "
효과 그림:
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Asp. net 코어 와 라 이브 러 리 에서 프로필 정 보 를 읽 습 니 다.config 를 읽 는 것 처럼 간단 하고 완벽 하지 않 은 것 같 습 니 다.마이크로소프트 가. Asp. net core 에서 프로필 을 읽 는 블 로 그 를 많이 봤 는데 문제 가 잘 해결 되 지 않 은 것 같 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.