我正在学习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>
答案 0 :(得分:0)
尝试像这样更改您的ForEach循环:
@foreach (var cats in Model.Categories)
{
<!option value="@cats.Id" @((@Model.Posts.FirstOrDefault == cats.Id) ? "selected" : string.Empty)>@cats.Title()</!option>
}
重要提示!在标签中。