提问人:Парсонале 提问时间:4/24/2023 最后编辑:marc_sПарсонале 更新时间:4/24/2023 访问量:395
ASP.NET Core:将 Id 从视图发送到控制器
ASP.NET Core : send Id from view to controller
问:
我需要将 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 全部为零。我不知道你能做些什么。也许我需要使用隐藏字段,但这对我不起作用。还是以不同的方式发送对象?
答:
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”
Step4。添加如下(只需按“+”添加 dbcontext 名称。
第4步。这将生成一个 CRUD 控制器和视图。现在将数据库连接字符串更改为您的连接字符串并更新它。(,).
现在,您可以运行此示例以查看其工作原理。add-migration initial
update-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/5
return View(category)
评论
0赞
Парсонале
4/24/2023
我有一个模型、一个控制器和一个视图。在我的例子中,客户端选择要编辑的类别,控制器中的方法 Edit() {...} 返回 View(category),然后在视图中,客户端必须输入新数据并向重载方法 Edit(Category obj) {} 发送发布请求。在我的情况下,该对象带有新的编辑数据,但 guid 是一组零。我假设客户端也必须将其与更改的数据一起发送,但我不知道如何发送
0赞
Qiang Fu
4/25/2023
@Парсонале 请尝试我提到的示例,它还有一个用于编辑的发布操作。 允许用户输入新数据,但继承自以前的 ID 除外。该示例是一个完整的 CRUD MVC 项目,供你参考。
评论
<input type="hidden">
但这可以通过 F12 轻松更改。从路由参数中获取它是最可靠的方法