如何将参数从 View 传递给 Controller?

How to give a param from View to Controller?

我有一个非常愚蠢的问题。我的项目中有一个 foreach 循环:

@foreach (var item in Model.HallIndex!)

foreach 给我一个电影院的所有大厅+未来排定的电影,包括电影的时间。所以我从查询中得到这个回到我的网络应用程序:

电影院 1

正在播放:

下一部电影:尖叫(下午 3:00)

电影院 2:

正在播放:

下一部电影:泰坦尼克号(晚上 8:30)

等等……我想你到目前为止已经明白了。但!我想使用 Hallnumber 来获取另一个查询的结果,该查询从现在在每个大厅播放的数据库中获取电影。所以,我需要获取控制器的参数。

编辑

这是我真正尝试做的,但 MovieNow 不起作用:

控制器:

public async Task<ActionResult<IndexViewModel>> Index(int hallId)
{
   IndexViewModel indexViewModel = new IndexViewModel();
        
   indexViewModel.MovieIndex = MovieIndex();
   indexViewModel.MovieNow = MovieNow(hallId);
   indexViewModel.HallIndex = MovieNext();

   return View(indexViewModel);
}

public Showtime MovieNow(int hallId)
{
return _context.Showtime.FromSqlRaw("SELECT * FROM db.\"Showtime\" S JOIN db.\"Movie\" M ON S.\"MovieId\" = M.\"Id\" WHERE \"StartAt\" < now() AND S.\"HallId\" = {0} ORDER BY \"StartAt\" DESC", hallId).FirstOrDefault();
}

ViewModel:

public class IndexViewModel
{
    public Hall? Hall { get; set; }
    public Movie? Movie { get; set; }
    
    public IEnumerable<Showtime>? MovieIndex { get; set; }
    public IEnumerable<Showtime>? HallIndex { get; set; }
    public Showtime? MovieNow { get; set; }
}

查看:

<div class="col-4">
   <div class="text-center index-hall-overview">
   @foreach (var item in Model.HallIndex!)
   {
      <div class="row">
         <p class="index-hall-title">CINEMA @Html.DisplayFor(model => item.HallId)</p>
         <p class="index-hall-now">Now playing: @Html.DisplayFor(m => Model.MovieNow.Movie.Title, item.HallId) </p>
         <p class="index-hall-next"><span class="index-hall-p">Next movie:</span> @Html.DisplayFor(model => item.Movie.Title)
         @{
             var startTime = item.StartAt.ToLocalTime().TimeOfDay.ToString(@"hh\:mm");
         }
         (@Html.DisplayFor(model => startTime))</p>
         </div>
         <hr class="index-hall-hr"/>
         }
    </div>
</div>

如果我这样做,我会得到错误: “PostgresException:42702:列引用“Id”不明确 POSITION:8”

确保您传递的参数正确,因为您的代码看起来不错。

当您加入 Showtime 和 Movie table 时,SELECT * 将 return 来自 的所有列 tables。显然两者都包含一个 Id 列,因此应该使用哪个来填充 Id 属性?

解决方案:使用 SELECT s.*

将列 return 限制为正确的 table

很可能是因为您在视图中指向相同的 ID DisplayFor(model => item.HallId)