안녕하세요.
초보 개발자입니다.
ASP.NET 웹서비스 개발하고 있는데, cs 파일에서 hashTable의 레코드 값을 aspx에서 사용하고 싶습니다.
cs에서 변수는 아래와 같습니다.
[ Main.aspx.cs ]
string hist_Yn = (hashTable 레코드 존재 여부);
int hist_Count = (hashTable 레코드 수);
이제 여기부터가 문제인데…
레코드 값에 따라서 보여줘야 하는 div 가 달라서 아래와 같이 구성해보고 싶습니다.
여기에서 if문과 for문에 각각 어떻게 작성해야 할까요? 도와주십쇼 ㅠㅜㅠㅜ
[ Main.aspx ]
<%
if( “cs의 hist_Yn이 N일 경우”)
%>
div type 1 보여주기
<%
else
for ( “cs의 hist_Count만큼 반복하며”)
%>
div type 2 보여주기
1개의 좋아요
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="webform._Default" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<div class="row">
<% if(!hist_Yn) { %>
<div>None</div>
<% } %>
<% foreach(var key in ht.Keys) { %>
<div><%=ht[key]%></div>
<% } %>
</div>
</asp:Content>
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace webform
{
public partial class _Default : Page
{
public bool hist_Yn = false;
public Hashtable ht = new Hashtable();
protected void Page_Load(object sender, EventArgs e)
{
ht.Add("aaa", "111");
ht.Add("bbb", "222");
if (ht.Count > 0)
{
hist_Yn = true;
}
}
}
}
이런걸 말씀하시나요? 중간에 else가 빠졌는데 foreach앞에 넣으시면 될듯합니다.
4개의 좋아요
nyjin
8월 22, 2022, 5:57오전
3
razor가 아닌 예전 aspx view engine 문법이네요.
hashtable이 있으시면 hist_Yn, hist_Count 변수는 필요하지 않을 것 같아 정리하였습니다.
아래 구문 참조해주세요~
<% if (this.ValueTable.Count > 0) { %>
<% foreach (var item in this.ValueTable.OfType<DictionaryEntry>()) { %>
<div>KEY: <%= item.Key %></div>
<div>VALUE: <%= item.Value %></div>
<%} %>
<% } else { %>
<div>Empty</div>
<% } %>
public Hashtable ValueTable { get; } = new Hashtable();
protected void Page_Load(object sender, EventArgs e)
{
ValueTable.Add(1, 1);
ValueTable.Add(2, 2);
ValueTable.Add(3, 3);
ValueTable.Add(4, 4);
}
4개의 좋아요
너무너무 감사해요!!! 덕분에 이 문제는 해결 되었습니다!
그런데, 추가로 질문해도 괜찮을까요??
div 가 반복으로 생성되게 되면, ID값은 어떻게 지정 될까요??
2개의 좋아요
도움 주셔서 너무너무 감사드려요!!!
친절한 답변 덕분에 더 배워갑니다 ㅠㅜㅜㅠ
3개의 좋아요
foreach(var key in ht.Keys)
{
%>
<div id="ht-<%=key.ToString()%>"><%=ht[key]%></div>
<%
}
key가 유니크하다는 전제하에 바닐라js나 jquery에서 ht*** id를 선택해서 값을 전송할때 사용하시면 될듯합니다.
2개의 좋아요
답변 감사드립니다.
아래처럼 작성하면, 서버 태그 형식이 잘못 되었다고 나와요.
서버 컨트롤에서 <%…%> 태그 사용이 불가능하다고 하는데,
이를 대체할 수 있는 방법은 없을까요? 아래에서 i 변수는 for 구문 수행 시 사용되는 반복인자입니다.
<asp:Label ID=“lblHistType1_<%=i%>” runat=“server” Font-Bold=“true” ></asp:Label>
1개의 좋아요
<% if(!hist_Yn) { %>
<div>None</div>
<% }
else
{
%>
<asp:Panel ID="pnlAdd" runat="server">
<asp:Table ID="tbl" runat="server">
</asp:Table>
</asp:Panel>
<%
}
%>
protected void Page_Load(object sender, EventArgs e)
{
ht.Add(0, "111");
ht.Add(1, "222");
if (ht.Count > 0)
{
hist_Yn = true;
}
for (int i=0; i < ht.Count; i++)
{
TableCell tc = new TableCell();
TableRow tr = new TableRow();
Label _label = new Label();
_label.ID = "Label" + i;
_label.Text = ht[i].ToString();
tc.Controls.Add(_label);
tr.Cells.Add(tc);
tbl.Rows.Add(tr);
}
}
저도 webform은 해본적이 없어서요.
Behind에서 control을 생성해서 view화면에 보이게끔 통상처리하는 것 같습니다.
웹앱이라면 razorpages+ajax나 blazor, webapi를 권합니다.
ps. webform을 쓰셔야한다면 webform+ajax로 처리하시면 좋을것 같습니다.
2개의 좋아요