我正在学习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>
尝试并更改您的ForEach循环,如下所示:
@foreach (var cats in Model.Categories)
{
<!option value="@cats.Id" @((@Model.Posts.FirstOrDefault == cats.Id) ? "selected" : string.Empty)>@cats.Title()</!option>
}
重要的是!在标签中。