在我使用 asp-route-id 和 asp-page 打开的页面中使用我使用 foreach 循环生成的特定代码部分 (img src)

Use a specific part of code (img src) that I generated using a foreach loop in the page I open using asp-route-id and asp-page

这可能真的很简单,我在网上寻找答案时完全在寻找破旧的地方,所以很抱歉这个问题很简单。开始了...

我正在开发一个 ASP.NET 核心 Web 应用程序(使用 Razor 页面)并在 Visual Studio 2019 年利用 Entity Framework 核心。我创建了一个生成一堆不同图像的页面和基于我的模型使用 foreach 的 OWL2 旋转木马中的按钮:

<div class="owl_@bandModel.BandId owl-carousel owl-theme owl-drag">

    @foreach (var jobTitleModel in bandModel.JobTitles)
    {
        @if (jobTitleModel.ImageType.ImageTypeOption != null)
        {
            switch (jobTitleModel.ImageType.ImageTypeOption)
            {
                case "Apron":
                    <div class="item">
                        @{int randomImg = random.Next(1, Apron);}
                        <img src="~/content/images/map/@jobTitleModel.ImageType.ImageTypeOption/img@(randomImg).svg" type="image/svg+xml" />
                        <a asp-page="/UIMain/Requirements/Index" asp-route-ID="@jobTitleModel.JobTitleId" class="btn btn-outline-primary mb-2 mt-1 btn-block">@jobTitleModel.JobTitle</a>

                    </div>
                    break;
                case "Casual":
                    <div class="item">
                        @{randomImg = random.Next(1, Casual);}
                        <img src="~/content/images/map/@jobTitleModel.ImageType.ImageTypeOption/img@(randomImg).svg" type="image/svg+xml" />
                        <a asp-page="/UIMain/Requirements/Index" asp-route-ID="@jobTitleModel.JobTitleId" class="btn btn-outline-primary mb-2 mt-1 btn-block">@jobTitleModel.JobTitle</a>
                    </div>
                    break;

等...

一切正常。但是,当用户单击按钮时,即

<a asp-page="/UIMain/Requirements/Index" asp-route-ID="@jobTitleModel.JobTitleId" class="btn btn-outline-primary mb-2 mt-1 btn-block">@jobTitleModel.JobTitle</a>

我希望能够拍摄随机生成的准确图像并在打开的页面上使用它。

看起来像这样:

<img src="~/content/images/map/Apron/img5.svg" type="image/svg+xml" />

所以我的问题是,这可以做到吗?我已经探索了 asp-all-route-data 助手,但我可以弄明白。我希望它以与 asp-route-ID 助手相同的方式工作,但我认为这是错误的,因为它将把它添加到 URL.

值得指出的是,这些图像没有任何数据库关联,我不得不从 wwwroot/contents 文件夹中随机添加它们(使用 img#)作为随机数,以确保他们每次看起来都不一样。

提前致谢。

(感谢韩非的解释和信心的提升,有时候有人说你可以按照你的想法做事会很有帮助)

编辑以显示我如何实施@FeiHan 的建议:

韩飞建议我使用:

<a asp-page="/UIMain/Requirements/Index" asp-route-ID="@jobTitleModel.JobTitleId" asp-route-ImgId="@randomImg" class="btn btn-outline-primary mb-2 mt-1 btn-block">@jobTitleModel.JobTitle</a>

要点是添加 asp-route-ImgId="@randomImg" 助手,然而,这不是我所需要的全部,因为我还需要将 ImageType 传递到 img src 中。所以我遵循了这个逻辑,还包括了一个 asp-helper-tag,即 asp-route-ImgType="@jobTitleModel.ImageType.ImageTypeOption" .

所以我的 link 结构如下所示:

<a asp-page="/UIMain/Requirements/Index" asp-route-ID="@jobTitleModel.JobTitleId" asp-route-ImgType="@jobTitleModel.ImageType.ImageTypeOption" asp-route-ImgId="@randomImg" class="btn btn-outline-primary mb-2 mt-1 btn-block">@jobTitleModel.JobTitle</a>

然后我转到 Requirements/Index 页面 作为 link 中的参考并编辑了 Index.cshtml.cs 包括:

namespace ProjectName.Pages.UIMain.Requirments
{
    public class IndexModel : PageModel
    {
        public string RndmImgSrc { get; set; }

        public async Task OnGetAsync(int? id, int? ImgId, string ImgType)
        {
                    RndmImgSrc = string.Format("/content/images/map/{0}/img{1}.svg", ImgType, ImgId);
//If you are a proper noob like me, a little heads-up here. You need to remove the "~" symbol from the begining of the URL (~/content/) as the Routing will add the current page route and wont refer to the wwwroot.
        }
    }
}

然后在Index.cshtml中添加:

@page "{ImgType?}/{ImgID?}/{ID?}" //This was just to tidy up the URL
@model ProjectName.Pages.UIMain.Requirments.IndexModel

<img src="@Model.RndmImgSrc" type="image/svg+xml" width="300"/>

嘿嘿!成功了。

I want it to work in the same way that the asp-route-ID helper does, but I think that this would be wrong because it will add it to the URL.

您正在使用标签导航到另一个页面,通过 URL 传递数据是可以的。您可以传递生成的 Img Id randomImg,如下所示。

<div class="item">
    @{int randomImg = random.Next(1, Apron);}
    <img src="~/content/images/map/@jobTitleModel.ImageType.ImageTypeOption/img@(randomImg).svg" type="image/svg+xml" />

    <a asp-page="/UIMain/Requirements/Index" asp-route-ID="@jobTitleModel.JobTitleId" asp-route-ImgId="@randomImg" class="btn btn-outline-primary mb-2 mt-1 btn-block">@jobTitleModel.JobTitle</a>
</div>

此外,如果您不想在 URL 中将数据 randomImg 作为查询字符串或路由参数传递,您可以 post 通过隐藏表单生成 img 的 Id,如下所示。

switch (jobTitleModel.ImageType.ImageTypeOption)
{
    case "Apron":
        <div class="item">
            @{int randomImg = random.Next(1, Apron);}
            <img src="~/content/images/map/@jobTitleModel.ImageType.ImageTypeOption/img@(randomImg).svg" type="image/svg+xml" />

            <form method="post" asp-page="/UIMain/Requirements/Index" asp-page-handler="ShowImg" asp-route-ID="@jobTitleModel.JobTitleId">
                <input type="hidden" name="ImgId" value="@randomImg" />
                <input type="submit" class="btnhidden" />
            </form>
            <a asp-page="/UIMain/Requirements/Index" asp-route-ID="@jobTitleModel.JobTitleId" asp-route-ImgId="@randomImg" class="btn btn-outline-primary mb-2 mt-1 btn-block" onclick="return myfunc(this)">@jobTitleModel.JobTitle</a>
        </div>
        break;

    case "Casual":
        <div class="item">
            @{randomImg = random.Next(1, Casual);}
            <img src="~/content/images/map/@jobTitleModel.ImageType.ImageTypeOption/img@(randomImg).svg" type="image/svg+xml" />
            <form method="post" asp-page="/UIMain/Requirements/Index" asp-page-handler="ShowImg" asp-route-ID="@jobTitleModel.JobTitleId">
                <input type="hidden" name="ImgId" value="@randomImg" />
                <input type="submit" class="btnhidden" />
            </form>
            <a asp-page="/UIMain/Requirements/Index" asp-route-ID="@jobTitleModel.JobTitleId" asp-route-ImgId="@randomImg" class="btn btn-outline-primary mb-2 mt-1 btn-block" onclick="return myfunc(this)">@jobTitleModel.JobTitle</a>
        </div>
        break;
}

处理程序方法 ShowImg

public IActionResult OnPostShowImg()
{
    //code logic here

    return Page();
}

点击 <a> 标签时触发表单提交

function myfunc(el) {
    $(el).prev().find("input[type='submit']").click();
    return false;
}