더보기

@page "/ranking"
@using WebApplication1.Data.Models
@using WebApplication1.Data.Service

@inject RankingService RankingService

<h3>Ranking</h3>
<AuthorizeView>
<Authorized>
@if (_gameResults == null)
{
<p><em>Loading...</em></p>
}
else
{
<table class="table">
<thead>
<tr>
<th>UserName</th>
<th>Score</th>
<th>Date</th>
</tr>
</thead>
<tbody>
@foreach (var gameResult in _gameResults)
{
<tr>
<td>@gameResult.UserName</td>
<td>@gameResult.Score</td>
<td>@gameResult.Date.ToString()</td>
</tr>
}
</tbody>
</table>

<p>
<button class="btn btn-primary" @onclick="AddGameResult">
Add
</button>
</p>

@if (_showPopup)
{
<div class="modal" style="display:block" role="dialog">
<div class="modal-dialog">
<div class=" modal-content">
<div class="modal-header">
<h3 class="modal-title">Add/Update GameResult</h3>
<button type="button" class="close" @onclick="ClosePopup">
<span ares-hidden="true">X</span>
</button>
</div>
<div class="modal-body">
<label for="UserName">UserName</label>
<input class="form-control" type="text" placeholder="UserName" @bind-value="_gameResult.UserName" />

<label for="UserName">Score</label>
<input class="form-control" type="text" placeholder="Score" @bind-value="_gameResult.Score" />
<button class="btn btn-primary " @onclick="SaveGameResult">
Save
</button>
</div>
</div>
</div>
</div>
}

}

</Authorized>
<NotAuthorized>
<p>NotAuthorized </p>
</NotAuthorized>
</AuthorizeView>

@code {
List<GameResult> _gameResults;
bool _showPopup;
GameResult _gameResult;
protected override async Task OnInitializedAsync()
{
_gameResults = await RankingService.GetGameResyltAsync();
}

void AddGameResult()
{
_showPopup = true;
_gameResult = new GameResult() { Id = 0 };
}

void ClosePopup()
{
_showPopup = false;
}

async Task SaveGameResult()
{
if (_gameResult.Id == 0)
{
_gameResult.Date = DateTime.Now;
var result = RankingService.AddGameResult(_gameResult);
}
else
{
//TODO
}

_gameResults = await RankingService.GetGameResyltAsync();
}

}

 

1. 데이터 추가 팝업

Ranking.razor

'Add'버튼을 누르면 AddGameResult()를 통해 팝업을 열어준다.

SaveGameResult : DB에 저장 작업

 

RankingService.cs

 

Ranking.razor

 

작업 결과

Add버튼을 통해 새로운 데이터를 추가한다.

새로 추가된 데이터가 db에도 잘 들어감

반응형

'게임서버' 카테고리의 다른 글

Blazor #6 RankingApp(1)  (0) 2022.10.17
Blazor #5 Templated ComponentJavascript  (0) 2022.10.14
Blazor #4 Templated Component  (0) 2022.10.08
Blazor Binding #3 Parameter, Ref, EventCallback  (0) 2022.09.19
Blazor Binding #2  (0) 2022.09.17

DB와 연결을 수월하게 하기 위한 EntityFramework 방식

ApplicationDbContext.cs
Startup.cs

1. DB 테이블 연동하기

appsettings.json

appsettings.json파일에 기존에 있던 문자열을 지우고 연결할 연결 DB문자열을 넣어준다.

 

2. 유저 데이터 모델링

add-migration : 마이그레이션을 추가 한다.

생성 된 RankingService migration

3. DB 접근하기 위한 준비

RankingService.cs

DB를 참조하기 위한 RankingService를 생성

Startup.cs

Startup에 새로 생성한 RankingService를 DependencyInjection 해준다.

Ranking.razor

4. 데이터 입력

일단 각각 더미로 데이터를 입력해준다.

 

5. 결과

반응형

'게임서버' 카테고리의 다른 글

Blazor #7 RankingApp(2)  (0) 2022.11.06
Blazor #5 Templated ComponentJavascript  (0) 2022.10.14
Blazor #4 Templated Component  (0) 2022.10.08
Blazor Binding #3 Parameter, Ref, EventCallback  (0) 2022.09.19
Blazor Binding #2  (0) 2022.09.17

JS 연동하기

1. JS파일 추가

s파일을 생성하고 2개의 함수를 만들었다. 단순히 "Hello World" 텍스트가 있는  윈도 창이 뜨는 함수와 이용자가 입력한 string을 리턴하는 함수

 

2. host에 추가하기

추가할 js파일을 연동하기 위한 작업

 

3. 레이저 파일 추가

@page "/JSInterop" : 페이지 라우팅

@inject IJSRuntime :. NET에서 JS를 호출하려면 IJSRuntime가 필요하다

button  2개 추가

@code 부분

 

4. 웹사이트 메뉴 추가

웹사이트에 새로 추가한 블레이저 파일을 연결 작업.

 

실행결과

1번째 버튼

2번째 버튼

 

더보기

인프런 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] 강의를 듣고 정리

반응형

'게임서버' 카테고리의 다른 글

Blazor #7 RankingApp(2)  (0) 2022.11.06
Blazor #6 RankingApp(1)  (0) 2022.10.17
Blazor #4 Templated Component  (0) 2022.10.08
Blazor Binding #3 Parameter, Ref, EventCallback  (0) 2022.09.19
Blazor Binding #2  (0) 2022.09.17

c++의 templated나 c#의 generics같은 기능이라고 생각하면 된다.

@typeparam : 템플릿타입 컴포넌트를 만들기 위한 선언

RenderFragment : Header와 Row 타입을 템플릿으로 만들기 위한 타입

@Header : 아래 @code부분에 선언한 Header와 바인딩

@foreach ~ @Row : RenderFragment<Item> Row와 바인딩되었으며 어떤 식으로 작동될지 선언 부분이다.

 

템플릿 타입으로 만든 컴포넌트를 사용

 

실행 결과

반응형

'게임서버' 카테고리의 다른 글

Blazor #6 RankingApp(1)  (0) 2022.10.17
Blazor #5 Templated ComponentJavascript  (0) 2022.10.14
Blazor Binding #3 Parameter, Ref, EventCallback  (0) 2022.09.19
Blazor Binding #2  (0) 2022.09.17
Blazor Binding  (0) 2022.09.17

User.razor 전체 코드

 

컴포넌트 분리

저번 포스팅에 @code부분인 AddUser()와 KickUser()를 컴포넌트화 시키기 위해 새로운 Blazor파일을 생성해 분리하도록 해보자

ShowUser 블레이저 파일 생성

ShowUser.razor

ShowUser.razor파일을 생성해 User.razor에있던 리스트 생성과 유저 추가, 삭제하는 함수들을 옮겼다.

 

설명

User.razor

-<ShowUser></ShowUser> : 새로 생성한 ShowUser.razor를 사용하기 위한 처리

-<ShowUser User ="_users"> : ShowUser.razor의 User변수와 User.razor의 _user의 변수를 공유한다

-@ref ="_showUser" : 부모쪽에서 자식에 접근하는 방식(이 처리가 없으면 @code에 ShowUser는 null임)

CallbackTest="CallbackTestFunc" : 콜백을 사용할 때

 

ShowUser.razor

[Parameter] : 를 통해  다른 블레이저 파일에서 접근 가능하도록 명시한다.

(블레이저에서는 Action보다는 EventCallback을 추천한다. StateHasChanged()가 없어도 리프래시 처리 )

 

유저리스트에 요소 추가
유저리스트에 요소 삭제

"CallbackTest"문자가 보임 : 콜백 호출이 잘되고 있다

반응형

'게임서버' 카테고리의 다른 글

Blazor #6 RankingApp(1)  (0) 2022.10.17
Blazor #5 Templated ComponentJavascript  (0) 2022.10.14
Blazor #4 Templated Component  (0) 2022.10.08
Blazor Binding #2  (0) 2022.09.17
Blazor Binding  (0) 2022.09.17

@code 부분

OnInitialized() : 웹이 시작할때 시작되는 함수 (유니티 awake()나 start()정도로 생각하면 될듯하다)

AddUser() : 리스트 요소 추가 함수

KickUser() : 리스트 요소 삭제 함수

 

웹코드 부분

"list-group"

- @foreach (var user in _users)<li>는 리스트갯수별로 추가해줘야 하지만 동적으로 추가,삭제 되기 때문에 foreach로 처리 되도록 한다.

- @onclick="(()=>KickUser(user))을 통해 리스트 요소옆에 해당 요소를 제거하는 버튼을 추가하는 내용이다

 

"container"

- <input class="form-control" placeholder="Add User" @bind-value="_inputName" : 처음에 뜨는 텍스트는 "Add User", "_inputName"을 바인딩 처리

- <button class="btn btn-primary" type="button" @onclick="AddUser">Add user</button> : AddUser를 실행처리

 

결과화면

반응형

'게임서버' 카테고리의 다른 글

Blazor #6 RankingApp(1)  (0) 2022.10.17
Blazor #5 Templated ComponentJavascript  (0) 2022.10.14
Blazor #4 Templated Component  (0) 2022.10.08
Blazor Binding #3 Parameter, Ref, EventCallback  (0) 2022.09.19
Blazor Binding  (0) 2022.09.17

 

"oninput"을 넣어주면 슬라이드를 움직일때 실시간으로 값이 갱신된다.

step : 몇 단위로 증감시킬건지

bind-value : @code에있는 _value값을 처리

 

웹에서 표현되는 Value는 @code부분에 _value값을 보여주고 슬라이더로 _value값을 접근하여 변경할 수있다.

반응형

'게임서버' 카테고리의 다른 글

Blazor #6 RankingApp(1)  (0) 2022.10.17
Blazor #5 Templated ComponentJavascript  (0) 2022.10.14
Blazor #4 Templated Component  (0) 2022.10.08
Blazor Binding #3 Parameter, Ref, EventCallback  (0) 2022.09.19
Blazor Binding #2  (0) 2022.09.17

+ Recent posts