简体   繁体   English

如何根据单击的项目( ASP.NET 核心 Razor 页面)在表单中填写值字段?

[英]How to fill in the fields with values in a form based on an item clicked ( ASP.NET Core Razor page)?

Coffee shop is created with ASP.NET Core Razor page.咖啡店是用 ASP.NET 核心 Razor 页面创建的。 Coffee Model created and all available coffee is stored in a db (ef core). Coffee Model 已创建,所有可用的咖啡都存储在数据库(ef 核心)中。 We have two pages.我们有两个页面。 First page shows a table of all coffee (id, title, cost, ...)info.第一页显示所有咖啡(id、标题、成本、...)信息的表格。 Each coffee has an Edit "button".每杯咖啡都有一个编辑“按钮”。

<tbody>
        @foreach (var item in Model._coffeeItems)
        {....
                <td>
                    @item.Price &euro; 
                </td>

                <td>
                    <a asp-action= "GetCoffeeItem" >Edit</a> 
                    <a asp-action="RemoveCoffeeItem" >Delete</a>
                </td> ...

When clicked should be redirected to an Edit page with a form.单击时应重定向到带有表单的编辑页面。 All fields must be filled with coffee information for easier edit.所有字段都必须填写咖啡信息以便于编辑。

In First page CoffeeItemProvider.cs:在首页 CoffeeItemProvider.cs 中:

public async Task<FoodItem> GetCoffeeItem(int id)
        {
            var item = await _db.CoffeeItems
            .FirstOrDefaultAsync(i => i.Id == id);

            return item;
        }
public async Task UpdateCoffeeItem(int id, CoffeeItem item)
        {
            _db.CoffeeItems.Update(item);
            await _db.SaveChangesAsync();
        }

And in the Edit page:在编辑页面中:

<form asp-action="UpdateCoffeeItem">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <input type="hidden" asp-for="Id" />
    <div class="form-group">
        <label asp-for="Name" class="control-label"></label>
        <input asp-for="Name" class="form-control"  value = ""/>
        <span asp-validation-for="Name" class="text-danger"></span>
    </div>

How can I fill in the input f.ex.如何填写输入 f.ex. Name with value = "@item.Name"?具有值的名称 =“@item.Name”?

Is there any way to make GetCoffeeItem to take in id from First page item when clicked - call GetCoffeeItem- get item - and then redirect to /Edit page with item and assign value = "@item.Smth"?有什么方法可以让 GetCoffeeItem 在单击时从第一页项目中获取 id - 调用 GetCoffeeItem- 获取项目 - 然后重定向到 /Edit 带有项目的页面并分配值 =“@item.Smth”?

How about:怎么样:

...
<td>
    <a asp-action="GetCoffeeItem" asp-route-id="@item.Id">Edit</a>
    <a asp-action="RemoveCoffeeItem" asp-route-id="@item.Id">Delete</a>
</td>
...

and in GetCoffeeItem return the Edit view instead, eg:并在 GetCoffeeItem 中返回编辑视图,例如:

return View("Edit", coffeeModel);

I ended up creating an EditModel for /Edit page.我最终为 /Edit 页面创建了一个 EditModel。 redoing a bit @balinta answer.重做一点@balinta 的回答。

<a asp-page="./Edit" asp-route-id="@item.Id">Edit</a>


                        <button class="btn btn-primary" type="submit" asp-page-handler="delete"
                        asp-route-id="@item.Id">Delete
                        </button>

And in the Edit.cshtml.cs:在 Edit.cshtml.cs 中:

Just added @page "{id:int?}" on the top.刚刚在顶部添加了@page“{id:int?}”。 and implemented并实施

public async Task<IActionResult> OnGetAsync(int id)  function.

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM