ASP.NET Core:将 Id 从视图发送到控制器

ASP.NET Core : send Id from view to controller

提问人:Парсонале 提问时间:4/24/2023 最后编辑:marc_sПарсонале 更新时间:4/24/2023 访问量:395

问:

我需要将 from 模型传递给 get 请求中的对象。Id

视图

@model Category

<form method="post">
    <input type="hidden" asp-for="Id" value="@obj.Id"/>
    <div class="border p-3 mt-4">
        <div class="row pb-2">
            <h2 class="text-primary">Create Category</h2>
        </div>
        <div class="mb-3">
            <label asp-for="Name"></label>
            <input asp-for="Name" class="form-control"/>
            <span asp-validation-for="Name" class="text-danger"></span>
        </div>
        <div class="mb-3">
            <label asp-for="DisplayOrder"></label>
            <input asp-for="DisplayOrder" class="form-control"/>
            <span asp-validation-for="DisplayOrder" class="text-danger"></span>
        </div>
        <button type="submit" class="btn btn-primary" style="width:150px">Create</button>
        <a asp-controller="Category" asp-action="Index" class="btn btn-secondary" style="width:150px">
            Back to List
        </a>
    </div>
</form>

@section Scripts {
    @{
        <partial name="_ValidationScriptsPartial" />
    }
}

控制器

public IActionResult Edit(Category obj)
{
    if (obj.Name == obj.DisplayOrder.ToString())
    {
        ModelState.AddModelError("name", "Имя не должно быть равным циферке внизу");
    }

    if (ModelState.IsValid)
    {
        _db.Categories.Update(obj);
        _db.SaveChanges();

        return RedirectToAction("Index");
    }

    return View(obj);
}

不幸的是,当对象进入控制器时,其 guid 全部为零。我不知道你能做些什么。也许我需要使用隐藏字段,但这对我不起作用。还是以不同的方式发送对象?

C# asp.net-core-tag-helpers

评论

0赞 abolfazl sadeghi 4/24/2023
为什么在行中使用 @obj value=“@obj。Id“(您必须代替@Model.Id)?为什么在第 <form method=”post“ asp-action=”edit“ 行中使用 asp-action>?
0赞 Pieterjan 4/24/2023
<input type="hidden">但这可以通过 F12 轻松更改。从路由参数中获取它是最可靠的方法

答:

0赞 Qiang Fu 4/24/2023 #1

我认为您可以先尝试 mvc efcore 示例。
第1步。创建一个 mvc 项目。
第2步。添加一个类,例如“Category”

    public class Category
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
        public string DisplayOrder { get; set; }
    }

第3步。右键单击“控制器”文件夹,选择“添加-控制器”,然后选择“带视图的 MVC 控制器,使用 Entity Frameworkcore” enter image description here
Step4。添加如下(只需按“+”添加 dbcontext 名称。enter image description here
第4步。这将生成一个 CRUD 控制器和视图。现在将数据库连接字符串更改为您的连接字符串并更新它。(,).
现在,您可以运行此示例以查看其工作原理。
add-migration initialupdate-datebase

在 program.cs 中,有一个路由映射。

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

这使得 URL like 工作,并将“5”与 id 参数绑定。您可以检查控制器编辑操作方法“get”(为了清楚起见,您的问题方法用于“post”)Category/Edit/5

        // GET: Categories/Edit/5
        public async Task<IActionResult> Edit(Guid? id)
        {
            if (id == null || _context.Category == null)
            {
                return NotFound();
            }

            var category = await _context.Category.FindAsync(id);
            if (category == null)
            {
                return NotFound();
            }
            return View(category);
        }

当您转到 时,它将使用“5”查找整个模型并将其返回到页面。因此,提交时将继承要发布的 ID。Category/Edit/5return View(category)

评论

0赞 Парсонале 4/24/2023
我有一个模型、一个控制器和一个视图。在我的例子中,客户端选择要编辑的类别,控制器中的方法 Edit() {...} 返回 View(category),然后在视图中,客户端必须输入新数据并向重载方法 Edit(Category obj) {} 发送发布请求。在我的情况下,该对象带有新的编辑数据,但 guid 是一组零。我假设客户端也必须将其与更改的数据一起发送,但我不知道如何发送
0赞 Qiang Fu 4/25/2023
@Парсонале 请尝试我提到的示例,它还有一个用于编辑的发布操作。 允许用户输入新数据,但继承自以前的 ID 除外。该示例是一个完整的 CRUD MVC 项目,供你参考。