#c# #blazor #blazor-server-side
Вопрос:
Я пытаюсь инициализировать новый объект в C#, а затем распечатать атрибуты вновь созданного объекта в lt;pgt;
теге. Я застрял на том, как бы я взял сгенерированный объект из:
lt;button type="button" @onclick="@(() =gt; createSword("steel"))"gt;
And being able to use it in my web app. @page "/authors" lt;h3gt;Authorslt;/h3gt; lt;button type="button" @onclick="@(() =gt; createSword("steel"))"gt;Click me to generate a new swordlt;/buttongt; lt;pgt; Current Sword: lt;/pgt; lt;p id="generatedSword"gt;My Sword Details herelt;/pgt; @{ lt;pgt; Hello lt;/pgt; } @code { public Object createSword(string x) { Sword testSword = new Sword(x); return testSword; } public class Sword { //Defining attributes of sword public int damage; public String statType; public int stat; public String name; //Defining private variables of sword public Sword(string typeOfSword) { if (typeOfSword == "Steel") { damage = 5; name = "Steel Sword"; statType = "Strength"; stat = 2; } if (typeOfSword == "Bone") { damage = 10; name = "Bone Sword"; statType = "Strength"; stat = 5; } if (typeOfSword == "Glowing") { damage = 20; name = "Glowing Sword"; statType = "Strength"; stat = 10; } if (typeOfSword == null) { damage = 1; name = "None"; statType = "None"; stat = 0; } } } }
Должен ли я назначить его глобальному объекту, прежде чем делать это? Я считаю, что это можно обойти, когда я создаю класс игрока, и я мог бы просто распечатать данные игрока в этих полях, так как объект игрока будет уникальным постоянным объектом. Мысли?
Комментарии:
1. Да, твоя проблема здесь, парень, заключалась в том, что ты просто использовал объект. Если у вас есть тип Sword, как показано ниже, то вы можете просто использовать его в качестве локальной переменной в разделе кода, а затем ваши html-элементы будут привязаны к локальной переменной. Думайте о разделе кода как о своей модели представления. Придерживайтесь переменных там. Свяжите html с переменными. Добавьте код для работы с переменными, и Blazor сделает все возможное, чтобы убедиться, что работа будет выполнена, обновив пользовательский интерфейс.
Ответ №1:
Отвечает ли это на ваш вопрос (он кажется слишком простым)?
Я изменил ваш тип меча на an emun
и добавил создателя объекта в качестве статического метода в Sword
класс.
Созданный объект находится в закрытом поле generatedSword
.
@page "/" lt;h3gt;Authorslt;/h3gt; lt;button type="button" @onclick="() =gt; CreateSword(Sword.SwordType.Steel)"gt;Click me to generate a new swordlt;/buttongt; @if (generatedSword != null) { lt;pgt; Current Sword: @generatedSword.namelt;/pgt; } @{ lt;pgt; Hello lt;/pgt; } @code { private Sword generatedSword; private void CreateSword(Sword.SwordType typeOfSword) =gt; generatedSword = Sword.NewSword(typeOfSword); public class Sword { //Defining attributes of sword public int damage; public String statType; public int stat; public String name; //Defining private variables of sword public Sword(SwordType typeOfSword) { if (typeOfSword == SwordType.Steel) { damage = 5; name = "Steel Sword"; statType = "Strength"; stat = 2; } if (typeOfSword == SwordType.Bone) { damage = 10; name = "Bone Sword"; statType = "Strength"; stat = 5; } if (typeOfSword == SwordType.Glowing) { damage = 20; name = "Glowing Sword"; statType = "Strength"; stat = 10; } if (typeOfSword == SwordType.None) { damage = 1; name = "None"; statType = "None"; stat = 0; } } public enum SwordType {None, Steel, Bone, Glowing}; public static Sword NewSword(SwordType typeOfSword) =gt; new Sword(typeOfSword); } }