我有从服务参考API获取数据的方法。如何将这些数据显示在Razor页面上?

时间:2019-01-03 18:17:11

标签: razor asp.net-core

我有一个正在运行的.NET Core 2.1控制台应用程序,该应用程序在屏幕上显示字符信息。数据是从对API进行调用的服务引用中收集的。

我现在想使其成为Web应用程序。因此,我在Visual Studio 2017中使用Razor(cshtml)创建了一个新的.NET Core 2.1 Web应用程序。

我添加了控制台应用程序中的所有方法和服务引用,并消除了所有错误。

所以我现在有一个可构建的Web应用程序,但它只显示在创建项目时自动创建的“虚拟ASP.NET Core示例数据”页面。

但是我不确定如何获取显示数据的方法。以前,我只是这样使用“ Console.WriteLine”:

    public static void PrintCharacter(Character pc)
    {
        Console.WriteLine("Character Name =  " + pc.Name);
        ListCharactersResponse response = GetCharacter(pc.Id);

        foreach (Attribute attr in response.Results)
        {
            Console.WriteLine("Character Attributes: " + attr.Strength + " | " + attr.Intelligence + " | " + GetMagicPoints(attr.Intelligence, attr.Wisdom));
        }

    }

浏览生成的示例页面,我看到类似以下内容:

public class AboutModel : PageModel
{
    public string Message { get; set; }

    public void OnGet()
    {
        Message = "Your application description page.";
    }
}

我不太确定如何从上面的PrintCharacter之类的方法中获取数据到.cshtml页面。

我还需要Visual Studio吗?还是我需要编写某种类型的方法来在网页上而不是在控制台上显示数据?

谢谢!

1 个答案:

答案 0 :(得分:1)

在Razor页面中,您只需要使用@Model.Message来显示直接在PageModel中定义的变量。 ViewData被启用,而不允许ViewBag。请参考ViewData in Razor Pages

public class AboutModel : PageModel
{
    public string Message { get; set; }

    public void OnGet()
    {
       Message = "Your application description page.";
       ViewData["message"] = "test message";
    }
}

查看

@page
@model AboutModel
<h1>@ViewData["message"]</h1>
<h1>@Model.Message</h1>

更新:

要从view中的静态方法读取数据,您需要从该方法返回数据并知道其命名空间以进行调用。请参阅Using Static Variables in Razor

例如,在ConsoleApp类中创建一个静态方法。

public class ConsoleClass
{
    public static List<string> PrintCharacter(Character pc)
    {
        Console.WriteLine("Character Name =  " + pc.Name);
        ListCharactersResponse response = GetCharacter(pc.Id);
        List<string> Test = new List<string>();

        foreach (Attribute attr in response.Results)
        {
            Test.Add("Character Attributes: " + attr.Strength + " | " + attr.Intelligence + " | " + GetMagicPoints(attr.Intelligence, attr.Wisdom));
        }
        return Test;
   }
}

在PageModel中,我们需要调用该方法:

[BindProperty]
public Character Character { get; set; }
public List<string> DataStored { get; set; }

public IActionResult OnGet()
{
    DataStored = ConsoleApp.ConsoleClass.PrintCharacter(Character);//use correct namespace
}

在视图中:

@foreach (var item in Model.DataStored)
{
   <h3>@item</h3>
}

您也可以直接在视图中调用static方法,例如:

@foreach (var item in ConsoleApp.ConsoleClass.PrintCharacter(Model.Character))
{
   <h3>@item</h3>
}