【发布时间】:2020-11-11 00:03:35
【问题描述】:
我有两个下拉列表,我正在尝试创建一个动态下拉列表,用户从下拉列表中选择偏好类型,并且员工偏好值下拉列表的输入将显示用户选择的不同偏好类型的选择。
例如;用户在偏好类型中选择“天”。 Preference Value 下拉列表将显示带有“Monday,Tuesday,Wednesday”的硬编码选项列表
或
用户在偏好类型中选择“分支位置”。 偏好值下拉列表将显示带有“北、南、东、西”的硬编码选项列表
我当前的代码是这样的。我现在正在使用 StaffPreferenceModel 来获取和设置视图页面中的所有项目。我不确定如何为每个不同的选择创建一个动态下拉列表。
员工偏好模型
public class StaffPreferenceModel
{
[Key]
[Display(Name = "Staff Preference ID")]
public Guid StaffPreferenceID { get; set; }
[Display(Name = "Preference Type ID")]
public Guid PreferenceTypeID { get; set; }
[ForeignKey("PreferenceTypeID")]
public PreferenceTypeModel PreferenceTypes { get; set; }
[Required(ErrorMessage = "Please Enter Staff Preference Status ..")]
[Display(Name = "Staff Preference Value")]
public string StaffPreferenceValue { get; set; }
[Required(ErrorMessage = "Please Enter Prefered Date ..")]
[Display(Name = "Staff Preference Date")]
[DataType(DataType.Date)]
public DateTime StaffPreferenceSetDate { get; set; }
[Display(Name = "Branch Zone ID")]
public Guid BranchZoneID { get; set; }
[ForeignKey("BranchZoneID")]
public BranchZoneModel BranchZones { get; set; }
[Display(Name = "Staff ID")]
public Guid StaffID { get; set; }
[ForeignKey("StaffID")]
public StaffModel Staffs { get; set; }
[Display(Name = "Work Desciption ID")]
public Nullable<Guid> WorkDescriptionID { get; set; }
[ForeignKey("WorkDescriptionID")]
public WorkDescriptionModel WorkDescriptions { get; set; }
}
控制器:
public IActionResult CreateStaffPreference()
{
ViewData["BranchZoneID"] = new SelectList(_context.BranchZone, "BranchZoneID", "BranchZoneName");
ViewData["PreferenceTypeID"] = new SelectList(_context.PreferenceType, "PreferenceTypeID", "PreferenceName");
ViewData["StaffID"] = new SelectList(_context.Staff, "StaffID", "StaffName");
ViewData["WorkDescriptionID"] = new SelectList(_context.WorkDescription, "WorkDescriptionID", "WorkDescriptionName");
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> CreateStaffPreference([Bind("StaffPreferenceID,PreferenceTypeID,StaffPreferenceValue,StaffPreferenceSetDate,BranchZoneID,StaffID,WorkDescriptionID")] StaffPreferenceModel staffPreferenceModel)
{
if (ModelState.IsValid)
{
staffPreferenceModel.StaffPreferenceID = Guid.NewGuid();
_context.Add(staffPreferenceModel);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(ProfilePage));
}
ViewData["BranchZoneID"] = new SelectList(_context.BranchZone, "BranchZoneID", "BranchZoneName", staffPreferenceModel.BranchZoneID);
ViewData["PreferenceTypeID"] = new SelectList(_context.PreferenceType, "PreferenceTypeID", "PreferenceName", staffPreferenceModel.PreferenceTypeID);
ViewData["StaffID"] = new SelectList(_context.Staff, "StaffID", "StaffName", staffPreferenceModel.StaffID);
ViewData["WorkDescriptionID"] = new SelectList(_context.WorkDescription, "WorkDescriptionID", "WorkDescriptionName", staffPreferenceModel.WorkDescriptionID);
return View(staffPreferenceModel);
}
查看页面:
<div class="row">
<div class="col-md-4">
<form asp-action="CreateStaffPreference">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="PreferenceTypeID" class="control-label"></label>
<select asp-for="PreferenceTypeID" class="form-control" asp-items="ViewBag.PreferenceTypeID"></select>
</div>
<div class="form-group">
<label asp-for="StaffPreferenceValue" class="control-label"></label>
<select asp-for="StaffPreferenceValue" class="form-control" /></select>
<span asp-validation-for="StaffPreferenceValue" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="StaffPreferenceSetDate" class="control-label"></label>
<input asp-for="StaffPreferenceSetDate" class="form-control" />
<span asp-validation-for="StaffPreferenceSetDate" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="WorkDescriptionID" class="control-label"></label>
<select asp-for="WorkDescriptionID" class="form-control" asp-items="ViewBag.WorkDescriptionID"></select>
</div>
<div class="form-group">
<label asp-for="BranchZoneID" class="control-label"></label>
<select asp-for="BranchZoneID" class="form-control" asp-items="ViewBag.BranchZoneID"></select>
</div>
<div class="form-group">
<label asp-for="StaffID" class="control-label"></label>
<select asp-for="StaffID" class="form-control" asp-items="ViewBag.StaffID"></select>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<input type="submit" value="Save" class="btn btn-primary btn-block" />
</div>
<div class="form-group col-md-6">
<a asp-action="ProfilePage" class="btn btn-secondary btn-block"><i class=" fa fa-table"></i>Back to List</a>
</div>
</div>
</form>
</div>
</div>
【问题讨论】:
-
在选择偏好类型时通过 ajax 创建一个事件句柄。获取该事件 (ActioneResult) 中的 Preference Value 下拉列表并将其返回以填充到下拉列表中。
-
嗨,@zan berzanus,如果答案解决了您的问题,请标记它以帮助更多人。如果没有,我们或许可以继续探索解决方案。请跟进。感谢您的时间和努力。
-
@MichelleWang 嗨,我仍然无法完成此功能。我正在弄清楚!谢谢
-
嗨,@zan berzanus,我看不到级联的需求,你的意思是下拉列表的值都来自 StaffPreferenceModel 吗?如果是这样,那就比以前容易了。
-
切换StaffPreferenceModel的方法是什么?通过重定向页面或 Dopdownlist 级联。对 ajax 函数进行编码很重要。请详细说明更多操作逻辑,以便我们提供帮助。
标签: c# html asp.net asp.net-mvc asp.net-core