ASP.NET Core选择标记

问题描述 投票:0回答:1

我正在学习asp .net核心,为此我正在开发简单的博客应用程序。我想编辑现有的帖子,我希望有关于帖子类别的下拉列表,但是默认选择了帖子的当前类别。我没有在视图上这样做。

这是我的ViewModel:

namespace Blog.Models.ViewModels
{
    public class CategoryViewModel
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public IEnumerable<Posts> Posts { get; set; }
        public IEnumerable<Categories> Categories { get; set; }
    }
}

这是我的控制器动作:

[HttpGet]
public async Task<IActionResult> Edit(int? id)
{
  if (id == null)
  {
    return NotFound();
  }

  var posts = _db.Posts.ToList();
  var post = posts.Where(m => m.Id.Equals(id));
  var cats = _db.Categories.ToList(); 
  CategoryViewModel categoryViewModel = new CategoryViewModel();

  categoryViewModel.Posts = post;
  categoryViewModel.Categories = cats;

  return View(categoryViewModel);
}

最后这是我的观点:

<label for="postCategory">Category</label>
<select>
@foreach (var cats in Model.Categories)
{
   <option value="@Html.DisplayFor(m => cats.Id)">
      @Html.DisplayFor(m => cats.Title)
   </option>
}
</select>

我的问题是如何在视图中制作这样的东西:

<option value="@Html.DisplayFor(m => cats.Id)" **if(post.Category = cats.Id){ print selected }**>
   @Html.DisplayFor(m => cats.Title)
</option>
html razor asp.net-core-2.0
1个回答
0
投票

尝试并更改您的ForEach循环,如下所示:

@foreach (var cats in Model.Categories)
{
    <!option value="@cats.Id" @((@Model.Posts.FirstOrDefault == cats.Id) ? "selected" : string.Empty)>@cats.Title()</!option>
}

重要的是!在标签中。

© www.soinside.com 2019 - 2024. All rights reserved.