首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将当前过滤结果传递给锚,以便我可以生成一个基于该搜索输入的pdf?

如何将当前过滤结果传递给锚,以便我可以生成一个基于该搜索输入的pdf?
EN

Stack Overflow用户
提问于 2022-09-02 08:28:57
回答 1查看 49关注 0票数 0

Asp.net核心mvc 3.1我有一个索引视图,它显示了一个电影列表,其中我添加了一个搜索文本框,我想知道是否有任何方法将该搜索值传递给锚元素。此锚元素指向生成pdf视图的操作。但是我想把搜索输入传递给一个锚,这样我就可以基于这个输入进行查询,并根据搜索到的输入生成不同的pdf结果.如果你们能帮我我会很感激的..。

MoviesController

代码语言:javascript
复制
    // GET: Movies
    public async Task<IActionResult> Index(string search)
    {
      
            var movies = _context.Movies.Include(m => m.Genre).OrderBy(m=>m.Name);
        if (!string.IsNullOrEmpty(search))
        {
            var query = _context.Movies.Include(m => m.Genre);
              var searchedItems = query.Where(m => m.Name.Contains(search) || m.Genre.Name.Contains(search) || m.Year.ToString().Contains(search));
            return View(await searchedItems.ToListAsync());
           
        }
        
            return View( await movies.ToListAsync());
        
    }

    public IActionResult GeneratePdf(string linkedSearch)
    {
        var movies = _context.Movies.Include(m => m.Genre).OrderBy(m => m.Name).ToList();
        return new ViewAsPdf("GeneratePdf", movies)
        {
            PageOrientation = Rotativa.AspNetCore.Options.Orientation.Portrait,
            PageSize = Rotativa.AspNetCore.Options.Size.A4
        };
       
    }

index.cshtml

代码语言:javascript
复制
@model IEnumerable<MovieListApp.Models.Movie>

@{
    ViewData["Title"] = "Index";
}

<h1>Index</h1>

<p>
    <a asp-action="Create">Add new movie</a>
</p>
<a asp-action="Index">Refresh</a>
@* Table Omitted for brevity *@
<form asp-action="Index" asp-controller="Movies" method="get">
    <p>
        Search:<input type="text" name="search" placeholder="name, Genre, year" />
        <input type="submit" value="Filtrar" />
    </p>
</form>

<a asp-action="GeneratePdf" asp-controller="Movies">Generate Pdf</a>

搜索结果..。

解决方案值得一提的是,pdf视图是用ROTATIV1.2版本生成的,GeneratePdf操作方法链接到视图.MoviesContrller

代码语言:javascript
复制
// GET: Movies
        public async Task<IActionResult> Index(string search)
        {
            ViewData["Search"] = search;
                var movies = _context.Movies.Include(m => m.Genre).OrderBy(m=>m.Name);
            if (!string.IsNullOrEmpty(search))
            {
                var query = _context.Movies.Include(m => m.Genre);
                  var searchedItems = query.Where(m => m.Name.Contains(search) || m.Genre.Name.Contains(search) || m.Year.ToString().Contains(search));
                return View(await searchedItems.ToListAsync());
               
            }
            
                return View( await movies.ToListAsync());
            
        }

        public async Task<IActionResult> GeneratePdf(string linkedSearch)
        {
            
            var movies = _context.Movies.Include(m => m.Genre).OrderBy(m => m.Name);
            if (!string.IsNullOrEmpty(linkedSearch))
            {
                var query = _context.Movies.Include(m => m.Genre);
                var searchedItems = query.Where(m => m.Name.Contains(linkedSearch) || m.Genre.Name.Contains(linkedSearch) || m.Year.ToString().Contains(linkedSearch));

                return new ViewAsPdf("GeneratePdf",await searchedItems.ToListAsync())
                {
                    PageOrientation = Rotativa.AspNetCore.Options.Orientation.Portrait,
                    PageSize = Rotativa.AspNetCore.Options.Size.A4
                };
            }

            return new ViewAsPdf("GeneratePdf", await movies.ToListAsync())
            {
                PageOrientation = Rotativa.AspNetCore.Options.Orientation.Portrait,
                PageSize = Rotativa.AspNetCore.Options.Size.A4
            };
        }

Index.cshtml

代码语言:javascript
复制
@model IEnumerable<MovieListApp.Models.Movie>

@{
    ViewData["Title"] = "Index";
}

<h1>Index</h1>

<p>
    <a asp-action="Create">Add new movie</a>
</p>
<a asp-action="Index">Refresh</a>
<form asp-action="Index" asp-controller="Movies" method="get">
    <p>
        Search:<input type="text" name="search" placeholder="name, Genre, year" />
        <input type="submit" value="Filtrar" />
    </p>
</form>
@{
    <table class="table">
        <thead>
            <tr>
                <th>
                    @Html.DisplayNameFor(model => model.Name)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.Year)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.Rating)
                </th>
                <th>
                    <label>Genre</label>>
                </th>
                <th></th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model)
            {
                <tr>
                    <td>
                        @Html.DisplayFor(modelItem => item.Name)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.Year)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.Rating)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.Genre.Name)
                    </td>
                    <td>
                        <a asp-action="Edit" asp-route-id="@item.MovieId">Edit</a> |
                        <a asp-action="Details" asp-route-id="@item.MovieId">Details</a> |
                        <a asp-action="Delete" asp-route-id="@item.MovieId">Delete</a>
                    </td>
                </tr>
            }
        </tbody>
    </table>

}
<a asp-action="GeneratePdf" asp-controller="Movies" asp-route-linkedSearch="@ViewData["Search"]">Generate Pdf</a>

基于search https://i.stack.imgur.com/wj75M.png的差分pdf

另一个pdf基于另一个搜索 https://i.stack.imgur.com/75MDV.png

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-02 08:53:48

锚标记助手支持使用asp-route-{value}属性传递查询参数。但是首先,您需要将搜索值传递给视图。为此,您可以使用ViewData字典。

代码语言:javascript
复制
public async Task<IActionResult> Index(string search)
{ 
    // pass the search string to the view so that the anchor can pass it to the GeneratePdf action
    ViewData["Search"] = search;
    
    // rest of the code
}

然后在视图中:

代码语言:javascript
复制
<a asp-action="GeneratePdf" asp-controller="Movies" asp-route-linkedSearch="@ViewData["Search"]">Generate Pdf</a>

https://learn.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper?view=aspnetcore-6.0#asp-route-value

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73579797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档