【发布时间】:2022-01-06 19:36:13
【问题描述】:
我们有一个包含多个患者和多个不同字段的表单。我们有一个可以选择多个标志的部分。这是表单结果:
我们可以让其他字段提交。但是,标志字段不会发送值。我尝试了几种不同的方法,但我无法在模型中获得任何用于标记的值。
这是我们的患者模型:
public class Patients
{
[Key]
public int Id { get; set; }
[BindProperty]
public int CA_ALERTId { get; set; }
public int? NON_ALERTId { get; set; }
public string State { get; set; }
public List<Notes> Notes { get; set; }
public string Location { get; set; }
public string OffSiteLocation { get; set; }
[NotMapped]
public string Note { get; set; }
public ICollection<PatientFlags> PatientFlags { get; set; }
[NotMapped]
public MultiSelectList FlagsMulti { get; set; }
}
在视图中,我们将这个用于表单的标志部分:
<td>
<input type="hidden" asp-for="@Patients.PatientFlags" />
@Html.ListBox("Id", (MultiSelectList)@Patients.FlagsMulti)
</td>
在控制器中:
public async Task<JsonResult> Edit(Patients patients)
{
Debug.WriteLine("***Editing Patiient");
if(patients.Note != null)
{
await CreateNote(patients);
}
Patients patient = _context.Patients.Find(patients.Id);
if(patients.State != null)
{
patient.State = patients.State;
}
if (patients.Location != null)
{
patient.Location = patients.Location;
}
if (patients.OffSiteLocation != null)
{
patient.OffSiteLocation = patients.OffSiteLocation;
}
patient.FlagsMulti = patients.FlagsMulti;
if(patients.PatientFlags != null)
{
Debug.WriteLine("*********Adding Patient Flags"+patients.PatientFlags);
foreach(PatientFlags pf in patients.PatientFlags)
{
Debug.WriteLine("*******/adding patient flag"+pf.FlagId);
patient.PatientFlags.Add(pf);
}
}
_context.Update(patient);
await _context.SaveChangesAsync(); ....
返回的数据不包括 flagsmulti 或 patientflags 的任何内容。
我在网上看到了很多从多选框本身获取结果的示例,他们说您必须接收一个 int 数组。但是,我找不到一个很好的例子来说明多选何时必须成为模型的一部分。任何有关如何从多选中访问此数据以及其他模型数据的帮助将不胜感激。
-- 在@Conman_123 建议后编辑 我将助手更改为:
<select asp-for="@Patients.PatientFlags" asp-items="@Patients.FlagsMulti"></select>
【问题讨论】:
-
从生成的 HTML 看起来,您的 ViewModel 具有“Patients”对象作为嵌套属性,而您的
Edit操作的“患者”参数没有嵌套?正在工作的输入的name属性是否也类似于Patients.Location?还是他们就像Location? -
@Conman_123 其他人的 HTML 看起来像这样 -- 是的,它们工作正常。同样,患者是视图模型中的列表。我只是在此视图中更新患者,但该视图具有来自视图模型中其他模型的一些其他数据。
-
您可以尝试手动将
name设置为“PatientFlags”(没有嵌套),看看是否有效?通常,如果它实际上位于模型的嵌套属性中,则仅使用“嵌套”属性命名。
标签: c# asp.net-mvc multi-select