【发布时间】:2020-11-27 00:13:48
【问题描述】:
我尝试了各种 Google 搜索,但没有得到具体的结果。
问题很简单:我有一个表中记录的编辑表单。在同一个视图中,还有一个包含该表中所有记录的下拉列表。我想使用该下拉列表重新加载包含下拉列表中所选记录的表单。
这是编辑的“获取”操作:
public async Task<IActionResult> Edit(int? id)
{
if (id == null)
{
return NotFound();
}
var myObj = await _context.MyObjs.FindAsync(id);
if (myObj == null)
{
return NotFound();
}
VMEdit model = new VMEdit
{
// populate view model
};
var objList = _context.MyObjs.Select(c => new
{
Value = c.Id,
Text = c.Tag,
}).OrderBy(c => c.Text);
ViewData["ObjList"] = new SelectList(objList, "Value", "Text", id);
return View(model);
}
这是视图:
@model Audit.Models.VMEdit
@{
ViewData["Title"] = "Edit";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<form name="jumpForm" asp-action="Edit" asp-controller="MyObj" method="get">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group form-row">
<label asp-for="Id" class="col-md-3">Jump to: </label>
<div class="col-md-6">
<select asp-for="Id" class="form-control" asp-items="ViewBag.ObjList"></select>
</div>
<div class="col-md-3">
<input type="submit" value="Go" />
</div>
</div>
</form>
<form asp-action="Edit">
// edit form controls here
</form>
这个表单的行为是这样的:
假设我在 /MyObj/Edit/3
假设我从下拉列表中选择 Id=5 的记录并按 Go
加载的页面是/MyObj/Edit/3?Id=5
我打算加载的页面是/MyObj/Edit/5
我猜测将选择字段命名为“Id”会导致它绑定到加载的 Id (3)。但是,我不知道该怎么办。我希望表单生成的 Get 请求具有值为 5 的 Id 参数。
任何帮助将不胜感激。不涉及 javascript 的特别简单的解决方案。谢谢。
【问题讨论】:
标签: c# asp.net asp.net-core razor asp.net-core-mvc