ASP .NET :: CS <--> Aspx 변수 저장 문의

안녕하세요.

초보 개발자입니다.
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

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