在 mvc razor 页面上搜索列表

Searching through a list on mvc razor pages

我有以下型号:

 public class Photo
    {
        public string Id { get; set; }
        public List<string> Hashtag { get; set; }
        public string PhotoUrl { get; set; }
        public string SearchString { get; set; }
    }

我的观点是这样的:

@model PhotoSearch.Models.Photo[]
<div class="text-center">
    <p>Search.</p>
    <form>
        <p>
            Title: <input type="text" asp-for="SearchString" />
            <input type="submit" value="Filter" />
        </p>
    </form>
</div>


<h2>Photos</h2>
@{
    foreach (var photo in @Model)
    {
        <table>
            <tr>
                <th>URL</th>
                <th>Hashtags</th>
            </tr>
            <tr>
                <th>@photo.PhotoUrl %</th>
                <th>@String.Join(", ", @photo.Hashtag.ToArray());</th>
            </tr>
        </table>
    }
}

我正在从 API 获取最初为 Json 格式的照片列表,然后将它们反序列化为上述对象:

using (HttpClient client = new HttpClient())
                {
                    using (HttpResponseMessage response = await client.GetAsync(baseUrl))
                    {
                        using (HttpContent content = response.Content)
                        {
        
                            string data = await content.ReadAsStringAsync();

                            if (data != null)
                            {
                                var photoList = JsonConvert.DeserializeObject<Photo[]>(data);

                                if (!String.IsNullOrEmpty(searchString))
                                {
                                    var filteredList = photoList.Where(v => v.Hashtags.Contains(searchString));
                                    return View(filteredList);
                                }

                                return View(photoList);
                            }
                        }
                    }
                }

我在顶部设置了搜索表单,因为我希望用户能够输入主题标签列表,这将过滤结果,就像填充了 SearchString 一样,不同的视图将仅显示过滤后的照片.我的问题是 SearchString 是 Photo 的 属性 而不是视图中使用的 Photo[]。如果我使用 foreach,搜索框只会出现几次。有没有更简单的方法可以过滤照片?

这里不用asp-for。您可以只将输入名称设置为 SearchString,因为模型绑定是基于名称的。

<input type="text" id="SearchString" name="SearchString" />