C# C“Asp net核心MVC,从模型列表中提取数据”;列表<;电影>&引用;看来

C# C“Asp net核心MVC,从模型列表中提取数据”;列表<;电影>&引用;看来,c#,asp.net-mvc,model,asp.net-core-mvc,C#,Asp.net Mvc,Model,Asp.net Core Mvc,我想从Asp net core 3.1“MvMovie”教程项目中创建一个“最高价格”过滤系统。 这是View/movies/Index.cshtml @model MvcMovie.Models.MovieGenreViewModel 因为它使用的是@model MvcMovie.Models.MovieGenreViewModel Models/MovieGenreViewModel.cs: public class MovieGenreViewModel { publi

我想从Asp net core 3.1“MvMovie”教程项目中创建一个“最高价格”过滤系统。 这是View/movies/Index.cshtml

@model MvcMovie.Models.MovieGenreViewModel
因为它使用的是@model MvcMovie.Models.MovieGenreViewModel Models/MovieGenreViewModel.cs:

    public class MovieGenreViewModel
{
    public List<Movie> Movies { get; set; }
    public SelectList Genres { get; set; }
    public string MovieGenre { get; set; }
    public string SearchString { get; set; }

}
public class MovieGenreViewModel
{
公共列表电影{get;set;}
公共选择列表类型{get;set;}
公共字符串电影类型{get;set;}
公共字符串搜索字符串{get;set;}
}
我知道“价格”数据在列表中

List<Movie>
列表

但是我如何提取它并将其放在View/movies/Index.cshtml中,这样我就可以使用我的价格过滤系统了。

您可以使用几个razor语句来操作模型(在c#中),例如
@foreach
来迭代电影并显示所有价格或
{var firstElementPrice=movies[0]。price}
然后使用
firstElementPrice
,因为您希望仅检索第一个元素的价格

您可以在此处看到razor页面的可用语法元素列表:
.

在类MovieGenreViewModel中添加属性公共十进制价格{get;set;},并将最大价格更改为

Max price <input type="text" asp-for="@Model.Price" />
    <input type="submit" value="Filter" />
最高价格

在视图中绑定列表集合的一般方法就像@ekke所说的,都在循环中,然后使用
@Model.Movies[i].Price
以这种方式绑定。但在循环中会导致多个输入标记

如果您只需要一个输入,我认为最好的方法是通过输入输入一个
MaxPrice
,然后将这个
MaxPrice
传递到后台进行过滤,然后返回过滤后的数据

下面是一个工作演示:

控制器:

public IActionResult Index()
    {
        //the model is your selected data

        var model = new MovieGenreViewModel
        {
            SearchString = "aaaa",
            Genres = new List<SelectListItem> {
            new SelectListItem { Text = "AA", Value = "1"},
            new SelectListItem { Text = "BB", Value ="2"},
            new SelectListItem { Text = "CC", Value ="3" },
            },
     
            MovieGenre = "bbbb",
            Movies = new List<Movie>
            {
                new Movie{Id=1,Genre="a",Price=78,Rating="aa",ReleaseDate=DateTime.Now,Title="MOvie1"},
                new Movie{Id=2,Genre="b",Price=56,Rating="bb",ReleaseDate=DateTime.Now,Title="MOvie2"},
            }
        };
        return View(model);
    }
    [HttpPost]
    public IActionResult Index(decimal MaxPrice)
    {
        var model = new MovieGenreViewModel
        {
            SearchString = "aaaa",
            Genres = new List<SelectListItem> {
            new SelectListItem { Text = "AA", Value = "1"},
            new SelectListItem { Text = "BB", Value ="2"},
            new SelectListItem { Text = "CC", Value ="3" },
            },

            MovieGenre = "bbbb",
            Movies = new List<Movie>
            {
                new Movie{Id=1,Genre="a",Price=78,Rating="aa",ReleaseDate=DateTime.Now,Title="MOvie1"},
                new Movie{Id=2,Genre="b",Price=56,Rating="bb",ReleaseDate=DateTime.Now,Title="MOvie2"},
            }
        };
        //filter movies
        var movies = model.Movies.Where(c => c.Price <= MaxPrice).ToList();
        model.Movies = movies;

        return View(model);
    }      
public IActionResult Index()
{
//模型是您选择的数据
var模型=新的MovieGenreViewModel
{
SearchString=“aaaa”,
类型=新列表{
新建SelectListItem{Text=“AA”,Value=“1”},
新建SelectListItem{Text=“BB”,Value=“2”},
新建SelectListItem{Text=“CC”,Value=“3”},
},
MovieGenre=“bbbb”,
电影=新列表
{
新电影{Id=1,Genre=“a”,Price=78,Rating=“aa”,ReleaseDate=DateTime。现在,Title=“MOvie1”},
新电影{Id=2,Genre=“b”,Price=56,Rating=“bb”,ReleaseDate=DateTime。现在,Title=“MOvie2”},
}
};
返回视图(模型);
}
[HttpPost]
公共IActionResult索引(十进制最大价格)
{
var模型=新的MovieGenreViewModel
{
SearchString=“aaaa”,
类型=新列表{
新建SelectListItem{Text=“AA”,Value=“1”},
新建SelectListItem{Text=“BB”,Value=“2”},
新建SelectListItem{Text=“CC”,Value=“3”},
},
MovieGenre=“bbbb”,
电影=新列表
{
新电影{Id=1,Genre=“a”,Price=78,Rating=“aa”,ReleaseDate=DateTime。现在,Title=“MOvie1”},
新电影{Id=2,Genre=“b”,Price=56,Rating=“bb”,ReleaseDate=DateTime。现在,Title=“MOvie2”},
}
};
//过滤电影
var movies=model.movies.Where(c=>c.Price item.Price)
@DisplayFor(modelItem=>item.Rating)
@DisplayFor(modelItem=>item.ReleaseDate)
}
结果:

非常感谢您的回答,先生,但我的主要问题是如何在index.cshtml中创建一个输入,以读取当前位于index.cshtml“@model MvcMovie.Models.MovieGenreViewModel”之上的其他模型类(movie.cs)中的“价格”数据,否则其他函数将无法工作,但该模型确实包含一个“公共列表电影{get;set;}”行如果我的答案对您有用,您可以将其标记为答案,这将帮助将来遇到相同问题的人。
List<Movie>
Max price <input type="text" asp-for="@Model.Price" />
    <input type="submit" value="Filter" />
public IActionResult Index()
    {
        //the model is your selected data

        var model = new MovieGenreViewModel
        {
            SearchString = "aaaa",
            Genres = new List<SelectListItem> {
            new SelectListItem { Text = "AA", Value = "1"},
            new SelectListItem { Text = "BB", Value ="2"},
            new SelectListItem { Text = "CC", Value ="3" },
            },
     
            MovieGenre = "bbbb",
            Movies = new List<Movie>
            {
                new Movie{Id=1,Genre="a",Price=78,Rating="aa",ReleaseDate=DateTime.Now,Title="MOvie1"},
                new Movie{Id=2,Genre="b",Price=56,Rating="bb",ReleaseDate=DateTime.Now,Title="MOvie2"},
            }
        };
        return View(model);
    }
    [HttpPost]
    public IActionResult Index(decimal MaxPrice)
    {
        var model = new MovieGenreViewModel
        {
            SearchString = "aaaa",
            Genres = new List<SelectListItem> {
            new SelectListItem { Text = "AA", Value = "1"},
            new SelectListItem { Text = "BB", Value ="2"},
            new SelectListItem { Text = "CC", Value ="3" },
            },

            MovieGenre = "bbbb",
            Movies = new List<Movie>
            {
                new Movie{Id=1,Genre="a",Price=78,Rating="aa",ReleaseDate=DateTime.Now,Title="MOvie1"},
                new Movie{Id=2,Genre="b",Price=56,Rating="bb",ReleaseDate=DateTime.Now,Title="MOvie2"},
            }
        };
        //filter movies
        var movies = model.Movies.Where(c => c.Price <= MaxPrice).ToList();
        model.Movies = movies;

        return View(model);
    }      
<select asp-for="MovieGenre" asp-items="Model.Genres">
<option value="">All</option>
</select>
Title:
<input type="text" asp-for="SearchString" />
<input type="submit" value="Filter" />
Max price:
<form asp-controller="Movie" asp-action="Index">
<input type="text" name="MaxPrice"  />
<input type="submit" value="Filter" />
</form>
<table class="table">
<tbody>
    @foreach (var item in Model.Movies)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Price)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Rating)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.ReleaseDate)
            </td>
        </tr>
    }
</tbody>
</table>