首页 > 解决方案 > 在案例声明中传递图像文件 - Razor Pages

问题描述

我有几个图像(1,2,3,4),并想在我编写的 switch 语句中传递这些图像。但是,我想将 C# 代码推送到 Razor 页面内容(Purchase.cshtml)

下面的代码存在于我的 Purchase.cs 文件中

public void OnGet(int PizzaType, int PizzaCount)
{
    switch (PizzaType)
    {
            case 1:
                PizzaName = "BBQ Beef";
                PizzaCount = (int)(PizzaCount * 10.50);
                break;
            case 2:
                PizzaName = "Chicken and Pineapple";
                PizzaCount = (int)(PizzaCount * 8.50);
                break;
            case 3:
                PizzaName = "Pepperoni Feast";
                PizzaCount = (int)(PizzaCount * 9.0);
                break;
            case 4:
                PizzaName = "Vegeterian";
                PizzaCount = (int)(PizzaCount * 7.0);
                break;
    }

    ViewData["TotalPrice"] = PizzaCount;
    ViewData["PizzaType"] = PizzaName;
}

我如何做到这一点:我尝试了以下但没有结果。

<p>You purchased @ViewData["PizzaType"] </p>

@{
    int PizzaType = 1;
    string ImageFile;

    switch (PizzaType)
    {
        case 1:
            ImageFile = "<img src='~/images/1.jpg'>";
            break;
        case 2:
            ImageFile = "<img src='~/images/2.jpg'>";
            break;
        case 3:
            ImageFile = "<img src='~/images/3.jpg'>";
            break;
        case 4:
            ImageFile = "<img src='~/images/4.jpg'>";
            break;
    }
}

标签: c#asp.net-corerazor-pages

解决方案


该代码似乎工作正常,但它不会呈现您的img标签,因为您只是将它保存在 type 的变量中string。要呈现string变量中的 html,可以使用如下Html帮助方法:

int PizzaType = 1;
string ImageFile = ""; // Modify it to be empty as mvc would cause problem with unsigned variables.

switch (PizzaType)
{
    case 1:
        ImageFile = "<img src='~/images/1.jpg'>";
        break;
    case 2:
        ImageFile = "<img src='~/images/2.jpg'>";
        break;
    case 3:
        ImageFile = "<img src='~/images/3.jpg'>";
        break;
    case 4:
        ImageFile = "<img src='~/images/4.jpg'>";
        break;
}

if (!string.IsNullOrEmpty(ImageFile))
{
    @Html.Raw(ImageFile) @* And Render your html like this *@
}

或者您可以直接渲染它而不将其复制到您的变量中,如下所示:

@int PizzaType = 1;

@switch (PizzaType)
{
    case 1:
        <img src='~/images/1.jpg'>
        break;
    case 2:
        <img src='~/images/2.jpg'>
        break;
    case 3:
        <img src='~/images/3.jpg'>
        break;
    case 4:
        <img src='~/images/4.jpg'>
        break;
}

或者更简短地说,您可以做的是使用您的PizzaType变量来生成src并删除该switch语句。这是您switch声明的一个衬里:

<img src='~/images/@string.Format("{0}.jpg", PizzaType)'>

推荐阅读