如何解决你如何在 .net core razor 页面中绑定一个复选框?
如何在 .net core razor 页面中绑定复选框? 我目前遇到的问题是,当我提交表单(使用 post 方法)时,复选框值没有返回。
下面是我的代码。
域类:
public class Restaurant
{
public int Id { get; set; }
[Required,StringLength(80)]
public string Name { get; set; }
public Meals MealsServed { get; set; }
}
public class Meals
{
public int Id { get; set; }
public bool Breakfast { get; set; }
public bool Lunch { get; set; }
public bool Dinner { get; set; }
}
来自页面模型:
[BindProperty]
public Restaurant Restaurant{ get; set; }
public EditModel(IRestaurantData restaurantData,IHtmlHelper htmlHelper)
{
this.restaurantData = restaurantData;
this.htmlHelper = htmlHelper;
}
public IActionResult OnGet(int? restaurantId)
{
Restaurant = restaurantData.GetById(restaurantId.Value);
Restaurant.MealsServed.Breakfast = true;
return Page();
}
public IActionResult OnPost()
{
if (!ModelState.IsValid)
{
return Page();
}
restaurantData.Update(Restaurant);
restaurantData.Commit();
TempData["Message"] = "Restaurant Saved";
return RedirectToPage("./Detail",new { restaurantId = Restaurant.Id });
}
来自剃刀页面:
<form method="post">
<input type="hidden" asp-for="Restaurant.Id" />
<div class="form-group">
<label asp-for="Restaurant.Name"></label>
<input asp-for="Restaurant.Name" class="form-control" />
<span class="text-danger" asp-validation-for="Restaurant.Name"></span>
</div>
<div class="form-group">
<input asp-for="Restaurant.MealsServed.Lunch" />
<label asp-for="Restaurant.MealsServed.Lunch"> </label>
</div>
<button type="submit" class="btn btn-primary">Save</button>
</form>
解决方法
所以,我想出了问题。我上面介绍的一切都是正确的。 选中 Lunch 复选框并保存项目后,再次查看 Restaurant 项目后,它会返回未选中状态。
问题在于我从数据库中提取的数据的深度。它只是提取顶级数据。 所以,我不得不改变 GetById 方法:
public Restaurant GetById(int id)
{
return db.Restaurants.Find(id);
}
到:
public Restaurant GetById(int id)
{
return db.Restaurants.Where(r => r.Id == id).Include(r => r.MealsServed).FirstOrDefault();
}
明确告诉它为 MealsServed 属性中的对象提取数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。