Возврат атрибутов объекта из функции C# в веб-элементы Blazor

#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);   }  }