ASP.NET Core选择标记

时间:2018-07-03 21:48:50

标签: html razor asp.net-core-2.0

我正在学习asp .net核心,因此我正在开发简单的Blog应用程序。我想编辑现有帖子,并且希望下拉列表中包含帖子类别,但默认情况下已选择了该帖子的当前类别。我无法在视图上做到这一点。

这是我的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>

1 个答案:

答案 0 :(得分:0)

尝试像这样更改您的ForEach循环:

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

重要提示!在标签中。