🔧 새 프로젝트 생성
기존에 다양한 프로젝트가 설정되어 있는 HelloEmpty 대신, 바인딩 전용 새로운 Blazor Server 앱을 생성합니다.
Pages/ : Razor 컴포넌트가 위치하는 폴더Shared/NavMenu.razor : 사이드 메뉴 설정MainLayout.razor : 레이아웃 컴포넌트.razor 확장자 : HTML + C# 조합@page "/binding"
<h3>Binding</h3>
<p>Value : @_value</p>
@code {
int _value = 15;
}
@page "/binding" : URL 경로를 설정합니다.<p>Value : @_value</p> : C# 변수 _value를 UI에 출력합니다.@_value : @code 블록에서 정의된 변수를 참조함@page "/binding"
<h3>Binding</h3>
<p>Value : @_value</p>
<input type="range" step="1" @bind-value="_value" min="0" max="100" @bind-value:event="oninput"/>
@code {
int _value = 15;
}
<input type="range"> : 슬라이더 UI 요소입니다.@bind-value="_value" : 슬라이더의 값을 _value 변수와 양방향 연동합니다.@bind-value:event="oninput" : 값을 변경할 때마다 실시간 반영합니다.Shared/NavMenu.razor에 다음 항목 추가:
<div class="nav-item px-3">
<NavLink class="nav-link" href="binding">
<span class="oi oi-list-rich" aria-hidden="true"></span> Binding
</NavLink>
</div>
📝 이렇게 하면
localhost:xxxx/binding주소로 이동 가능하며, 좌측 메뉴에 “Binding”이 나타납니다.
📄 User.razor
@page "/user"
@using BlazorApp.Data
<h3>Online User</h3>
<p>Users: <b>@_users.Count()</b></p>
<ul class="list-group">
@foreach(UserData user in _users)
{
<li @key="user" class="list-group-item">
<button class="btn btn-link" @onclick="(() => KickUser(user))">ban</button>
<label>@user.Name</label>
</li>
}
</ul>
<div class="container mt-3">
<div class="row">
<div class="col">
<input class="form-control" placeholder="Add User" @bind-value="_inputName" />
</div>
<div class="col">
<button class="@_btnClass" type="button" @onclick="AddUser" disabled="@(_users.Count() >= 5)">Add a User</button>
</div>
</div>
</div>
@code {
List<UserData> _users = new();
string _inputName;
string _btnClass = "btn btn-primary";
protected override void OnInitialized()
{
_users.Add(new UserData() { Name = "Rookiss" });
_users.Add(new UserData() { Name = "Faker" });
_users.Add(new UserData() { Name = "Deft" });
}
void AddUser()
{
_users.Add(new UserData() { Name = _inputName });
_inputName = "";
RefreshButton();
}
void KickUser(UserData user)
{
_users.Remove(user);
RefreshButton();
}
void RefreshButton()
{
_btnClass = (_users.Count % 2 == 0) ? "btn btn-primary" : "btn btn-secondary";
}
}
@bind-value="_inputName" : 입력된 값을 _inputName에 저장@onclick="AddUser" : 버튼 클릭 시 리스트에 유저 추가disabled="@(_users.Count() >= 5)" : 유저가 5명이 넘으면 버튼 비활성화@_btnClass : 홀수/짝수에 따라 버튼 색상 바뀜<button class="@_btnClass" disabled="@(_users.Count >= 5)">Add a User</button>
class="@_btnClass" : C# 변수로 class 속성을 제어disabled="@(조건식)" : 조건에 따라 버튼을 비활성화할 수 있음속성 바인딩을 활용하면 유저 수에 따라 UI 상태를 동적으로 바꿀 수 있어 실무에서도 자주 사용됩니다.
Razor 컴포넌트는 다음과 같은 세 가지 구성 요소를 가집니다:
| 구성 | 설명 |
|---|---|
@page, @inject | 라우팅 경로, 서비스 주입 등 메타 설정 |
HTML + @코드 | 뷰(UI) 영역 |
@code 블록 | C# 로직 및 변수 정의 |