如何解决更改下拉列表ASP.NET CORE
我正在将ASP.NET CORE与SQL Server一起使用。
我有2个表:Review
和WorkSchedule
。 WorkSchedule
表包含ManagerID
和StaffID
。 Review
表包含ReviewerID
和RevieweeID
。 ManagerID
,StaffID
,ReviewerID
和RevieweeID
是StaffID
表中Staff
的外键。
例如,如果我在CreateReview
页中创建新评论,则将手动设置ReviewerID
和RevieweeID
。我想使WorkScheduleID
下拉列表自动更改,以使WorkScheduleID
出现在ManagerID
= ReviewerID
和StaffID
= RevieweeID
型号:
namespace Starbucks.Models
{
public class ReviewModel
{
[Key]
[Display(Name = "Review ID")]
public Guid ReviewID { get; set; }
[Display(Name = "Reviewer")]
public Guid ReviewerID { get; set; }
[ForeignKey("ReviewerID")]
public StaffModel Staff { get; set; }
[Display(Name = "Reviewee")]
public Nullable<Guid> RevieweeID { get; set; }
[ForeignKey("RevieweeID")]
public StaffModel Staffs { get; set; }
[Display(Name = "WorkSchedule ID")]
public Nullable<Guid> WorkScheduleID { get; set; }
[ForeignKey("WorkScheduleID")]
public WorkScheduleModel WorkSchedules { get; set; }
}
public class WorkScheduleModel
{
[Key]
[Display(Name = "Work Schedule ID")]
public Guid WorkScheduleID { get; set; }
[Display(Name = "Staff ID")]
public Nullable<Guid> StaffID { get; set; }
[ForeignKey("StaffID")]
public StaffModel Staffs { get; set; }
[Display(Name = "Manager ID")]
public Guid ManagerID { get; set; }
[ForeignKey("ManagerID")]
public StaffModel Staff { get; set; }
}
}
控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> CreateReview([Bind("ReviewID,ReviewCategoryID,ReviewRating,ReviewComment,ReviewDateTime,ReviewerID,RevieweeID,WorkScheduleID")] ReviewModel reviewModel)
{
if (ModelState.IsValid)
{
reviewModel.ReviewID = Guid.NewGuid();
reviewModel.ReviewDateTime = DateTime.Now;
_context.Add(reviewModel);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(ProfilePage));
}
ViewData["RevieweeID"] = new SelectList(_context.Staff,"StaffID","StaffName",reviewModel.RevieweeID);
ViewData["ReviewerID"] = new SelectList(_context.Staff,reviewModel.ReviewerID);
ViewData["WorkScheduleID"] = new SelectList(_context.WorkSchedule,"WorkScheduleID","WorkScheduleID");
return View(reviewModel);
}
查看页面:
<body>
<div class="row">
<div class="col-md-8">
<form asp-action="CreateReview">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="ReviewerID" class="control-label"></label>
<select asp-for="ReviewerID" class="form-control" asp-items="ViewBag.ReviewerID"></select>
</div>
<div class="form-group">
<label asp-for="RevieweeID" class="control-label"></label>
<select asp-for="RevieweeID" class="form-control" asp-items="ViewBag.RevieweeID"></select>
</div>
<div class="form-group">
<label asp-for="WorkScheduleID" class="control-label"></label>
<select asp-for="WorkScheduleID" class="form-control" asp-items="ViewBag.WorkScheduleID"></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>
</form>
</div>
</div>
</body>
解决方法
您可以创建一种过滤数据的方法,并使用ajax对其进行调用,然后使用返回的数据填充选择列表。
控制器:
public IActionResult Index()
{
ViewData["RevieweeID"] = new SelectList(_context.Staff,"StaffID","StaffName");
ViewData["ReviewerID"] = new SelectList(_context.Staff,"StaffName");
ViewData["WorkScheduleID"] = new SelectList(_context.WorkSchedule,"WorkScheduleID","WorkScheduleID");
return View();
}
[HttpGet]
public IActionResult FilterWorkScheduleID(Guid reviewerid,Guid revieweeid)
{
var WorkScheduleIDs = _context.WorkSchedule.Where(x => x.StaffID == revieweeid && x.ManagerID == reviewerid).ToList();
return Json(new { items = WorkScheduleIDs });
}
查看:
@model ReviewModel
@{
ViewData["Title"] = "Index";
}
<h1>Index</h1>
<div class="row">
<div class="col-md-8">
<form asp-action="CreateReview">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="ReviewerID" class="control-label"></label>
<select asp-for="ReviewerID" class="form-control" asp-items="ViewBag.ReviewerID"></select>
</div>
<div class="form-group">
<label asp-for="RevieweeID" class="control-label"></label>
<select asp-for="RevieweeID" class="form-control" asp-items="ViewBag.RevieweeID"></select>
</div>
<div class="form-group">
<label asp-for="WorkScheduleID" class="control-label"></label>
<select asp-for="WorkScheduleID" class="form-control" asp-items="ViewBag.WorkScheduleID"></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>
</form>
</div>
</div>
@section scripts{
<script>
$("select").on("change",function () {
var reviewerID = $("#ReviewerID").find(":selected").val();
var revieweeID = $("#RevieweeID").find(":selected").val();
$.ajax({
type: 'get',url: '/Staff/FilterWorkScheduleID',data: {
reviewerid: reviewerID,revieweeid:revieweeID
},success: function (result) {
$("#WorkScheduleID").empty();
$.each(result.items,function (i,obj) {
var option = "<option value=" + obj.workScheduleID + ">" + obj.workScheduleID + "</option>";
$(option).appendTo("#WorkScheduleID");
})
}
})
})
</script>
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。