如何在剃刀编辑页面上仅检索位置/实体关系的过滤值
Posted
技术标签:
【中文标题】如何在剃刀编辑页面上仅检索位置/实体关系的过滤值【英文标题】:How to retrieve only filtered values for location/entity relationship on razor edit page 【发布时间】:2021-11-03 18:03:36 【问题描述】:我正在从 sql 数据库(实体和位置)中检索两个列表。选择实体后,这会将位置值过滤为仅属于所选实体的那些值。这在创建条目或更改实体时工作正常,新的位置字段会正确填充。但是,当我去编辑现有记录时,会选择正确的位置,但它还会显示所有实体的所有位置,而不仅仅是所选实体的位置。我不希望用户意外选择属于不同实体的位置。
我将以康宁医院为例。它有两个地点,自助餐厅和凉亭2。
当用户尝试编辑现有记录时,它确实选择了正确的位置项(凉亭 2),但它也包含所有其他实体的位置项。
这是我的剃须刀编辑页面
<div class="form-group">
<label asp-for="SecurityLog.EntityID" class="control-label"></label>
<select id="entity" asp-for="SecurityLog.EntityID" class="form-control" asp-items="ViewBag.EntityID">
<option value="">--Select Entity--</option>
</select>
<span asp-validation-for="SecurityLog.EntityID" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="SecurityLog.LocationID" class="control-label"></label>
<select id="location" asp-for="SecurityLog.LocationID" class="form-control" asp-items="ViewBag.LocationID">
<option value="">--Select Location--</option>
</select>
<span asp-validation-for="SecurityLog.LocationID" class="text-danger"></span>
</div>
这里可以根据 onchange 事件过滤位置
$(function ()
$("#entity").on("change", function()
var entity = $(this).val();
$("#location").empty();
$("#location").append("<option value=''>--Select Location--</option>");
$.getJSON(`?handler=Locations&entity=$entity`, (data) =>
$.each(data, function (i, item)
$("#location").append(`<option value="$item.value">$item.text</option>`);
);
);
);
);
Edit.cshtml.cs
SelectList FilteredLocation;
public JsonResult OnGetLocations()
FilteredLocation = new SelectList(_context.Location.Where(c => c.EntityID == entity).Where(c => c.Active == "Y").OrderBy(c => c.Name), "ID", "Name");
return new JsonResult(FilteredLocation);
[BindProperty(SupportsGet = true)]
public int entity get; set;
[BindProperty(SupportsGet = true)]
public int location get; set;
public async Task<IActionResult> OnGetAsync(int? id)
SecurityLog = await _context.SecurityLog.FirstOrDefaultAsync(m => m.ID == id);
//Generating data for select dropdowns
ViewData["EntityID"] = new SelectList(_context.Entity.Where(a => a.Active == "Y"), "ID", "Name");
ViewData["LocationID"] = new SelectList(_context.Location.Where(a => a.Active == "Y"), "ID", "Name");
return Page();
【问题讨论】:
【参考方案1】:您需要在此处更改OnGet
方法以显示与当前EntityId 对应的位置:
ViewData["LocationID"] = new SelectList(locations.Where(a => a.Active == "Y" & a.EntityID==SecurityLog.EntityID), "ID", "Name");
【讨论】:
非常感谢。我在想那是我需要做出改变的地方,我只是不知道如何实施它。一如既往地感谢您的帮助。再次感谢!以上是关于如何在剃刀编辑页面上仅检索位置/实体关系的过滤值的主要内容,如果未能解决你的问题,请参考以下文章