簡體   English   中英

如何在 .net 核心 razor 頁面中綁定復選框?

[英]How do you bind a checkbox in .net core razor pages?

如何在 .net 核心 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; }
}

從 model 頁開始:

    [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 });

    }

來自 razor 頁面:

<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>

所以,我發現了問題所在。 我在上面介紹的一切都是正確的。 在選中“午餐”復選框並保存該項目后,然后再次查看“餐廳”項目,它將返回未選中狀態。

問題在於我從數據庫中提取的數據的深度。 它只是拉動頂級數據。 所以,我不得不改變 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 屬性中提取 object 的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM