【发布时间】:2019-07-31 15:13:55
【问题描述】:
我正在使用 kendo ui 网格,并且在使用它时将 id 传递给此函数时遇到了真正的麻烦,活动通过为 null 并且我必须首先获取
我的主要问题是如何获得
<div class="form-group row">
<div class="col-sm-12">
@(Html.Kendo().Grid<ActivityTrackerDal.Models.ActivityLines>
().Name("activityLines")
.Events(e => e.Edit("onEdit"))
.Columns(columns =>
{
columns.Bound(p => p.Description).Filterable(false);
columns.Bound(p => p.StartTime).Filterable(false);
columns.Bound(p => p.EndTime).Filterable(false);
columns.Bound(p => p.Status);
columns.Command(command => command.Custom("ViewDetails").Click("showDetails"));
})
.ToolBar(toolbar => toolbar.Create())
.Editable(editable => editable.Mode(GridEditMode.PopUp).TemplateName("ActivityEditor").Window(w => w.Title("Edit Provider").Width(500)))
.Scrollable()
.Pageable()
.Sortable()
.Filterable()
.DataSource(dataSource => dataSource
.Ajax()
.Events(events => events.Error("error_handler"))
.Model(model => model.Id(p => p.ActivityLineId))
.Events(events => events.Error("error_handler"))
.Read(read => read.Action("ActivityLines_Read", "Activity"))
.Update(update => update.Action("Activity_Update", "Activity").Type(HttpVerbs.Post)))
)
</div>
</div>
弹出窗口的下方表格
<div id="details-container">
<div class="form-group row">
<div class="col-sm-9">
<label for="inputFirstname">Activty Name</label>
@Html.TextAreaFor(model => model.First().Name, new { @class = "whatever-class", @cols = 115, @rows = 10 })
</div>
</div>
<div class="form-group row">
<div class="col-md-10">
<label for="inputLastname" class="form-control">Description</label>
</div>
</div>
<div class="form-group row">
<div class="col-md-6">
<label for="inputLastname" class="form-control">Start Time</label>
</div>
<div class="col-md-6">
<label for="inputLastname" class="form-control">End Time </label>
</div>
</div>
</div>
<input type="submit" class="btn btn-file px-4" value="Save Work Item" />
<button type="button" class="btn btn-primary px-4">Cancel</button>
</form>
</script>
这是我的两个带有 acitivylines 的控制器函数,它们的前部总是以 null 形式出现,我必须再次访问数据库并获取它们,这似乎不正确,但我不需要如何将 acitivy id 传递给这些函数。
这是我的模型第一
public class ActivityHeader
{
public int ActivityHeaderId { get; set; } //(int, null)
public DateTime? ActivityDate { get; set; } //(date, null)
public string Name { get; set; } //(nvarchar(350), null)
public DateTime? ActivityEndDate { get; set; } //(datetime, null)
public string ProblemDescription { get; set; }
public string Description { get; set; } //(nvarchar(max), null)
public int? ActivityLinesId { get; set; } //(int, null)
public int? HoursLeftOnProject { get; set; } //(time(7), null)
public int? Status { get; set; } //(nchar(10), null)
public string StatusName { get; set; }
public DateTime? CreatedDate { get; set; } //(date, null)
public string CreatedBy { get; set; } //(nvarchar(50), null)
public bool? isActive { get; set; } //(bit, null)
public bool? isDeleted { get; set; } //(bit, null)
public bool? isArchived { get; set; } //(bit, null)
public int? SOP { get; set; } //(nvarchar(50), null)
public int? OnSite { get; set; }
public int? Remote { get; set; }
public int? DepartmentId { get; set; } //(int, null)
public string EmployeeName { get; set; } //(nvarchar(301), null)
[ForeignKey("StaffId")]
public int? StaffId { get; set; }
public virtual StaffMembers StaffMembers { get; set; }
public ICollection<ActivityLines> ActivityLines { get; set; }
}
public class ActivityLines
{
[Key]
public int ActivityLineId { get; set; } //(int, not null)
public int? ActivityHeaderId { get; set; } //(int, null)
public string Description { get; set; } //(nvarchar(max), null)
public string Notes { get; set; } //(nvarchar(max), null)
public DateTime? StartTime { get; set; } //(time(7), null)
public DateTime? EndTime { get; set; }
public DateTime? StartDate { get; set; }
public DateTime? EndDate { get; set; } //(time(7), null)
public int? StaffMemeber { get; set; } //(int, null)
public bool? isActive { get; set; } //(bit, null)
public bool? isDeleted { get; set; } //(bit, null)
public string CreatedBy { get; set; } //(nvarchar(50), null)
public DateTime? CreatedDate { get; set; } //(date, null)
public int? Status { get; set; } //(int, null)
}
[AcceptVerbs("Post")]
public ActionResult Activity_Update([DataSourceRequest]DataSourceRequest request, ActivityLines activity,int? activityId)
{
int ActivityLineId =(int) activityId;
ActivityLines nLines = _activityRepo.GetActivityLineById(activityId);
nLines.Description = nLines.Description + "test do i savE";
_activityRepo.UpdateActivityLines(nLines);
return Json(new[] { nLines }.ToDataSourceResult(request, ModelState));
}
public ActionResult ActivityLines_Read([DataSourceRequest]DataSourceRequest request, int? activityID)
{
if (activityID == 0)
{
activityID = 1;
}
var result = GetAllActivityLines(1);
var dsResult = result.ToDataSourceResult(request);
return Json(dsResult);
}
正如你在上面看到的,我正在使用
var 结果 = GetAllActivityLines(1);
这是正确的,它应该从表单中获取 id 任何想法我确定有人以前做过。
showDetails 函数的 JavaScript
<script type="text/javascript">
var detailsTemplate = kendo.template($("#template").html());
function showDetails(e) {
e.preventDefault();
var dataItem = this.dataItem($(e.currentTarget).closest("tr")); // dataItem contains the ActivityLineId
var wnd = $("#Details").data("kendoWindow");
wnd.content(detailsTemplate(dataItem));
wnd.center().open();
}
function onEdit(e) {
var model = e.model;
var activityLinesGrid = e.container.find("#activityLines").data("kendoGrid");
activityLinesGrid.dataSource.read({ activityID: model.ActivityID });
}
这是我用来将我的活动线放在我的网格中的,它可以按照屏幕截图工作。
public List<ActivityLines> GetActivityLines(int? activityHeaderId)
{
int? _activityHeaderId = activityHeaderId;
var staffRepo = new StaffRepositry(_db);
List<ActivityLines> _activityLines = new List<ActivityLines>();
_activityLines = _db.ActivityLines.AsNoTracking().Where(a=>a.ActivityHeaderId== _activityHeaderId).ToList();
return _activityLines;
}
证明活动线获取数据的屏幕截图。
编辑 2
当它返回到活动更新功能时,活动为空,但我在这里的主要问题是如何将 id 传递给弹出窗口,以便我可以保存和更新正确的模型,我认为模型应该被传回里面的数据,但不是下面的截图。
我也使用视图模型作为它的一部分,但是当我去模型时。它没有提出个别领域。
public class ActivityEditViewModal
{
public int ActivityHeaderId { get; set; } //(int, null)
public DateTime? ActivityDate { get; set; } //(date, null)
public string Name { get; set; } //(nvarchar(350), null)
public DateTime? ActivityEndDate { get; set; } //(datetime, null)
public string Description { get; set; } //(nvarchar(max), null)
public int? ActivityLinesId { get; set; } //(int, null)
public int? HoursLeftOnProject { get; set; } //(time(7), null)
public int Status { get; set; } //(nchar(10), null)
public int ActivityType { get; set; } //(int, null)
public DateTime? CreatedDate { get; set; } //(date, null)
public string CreatedBy { get; set; } //(nvarchar(50), null)
public bool? isActive { get; set; } //(bit, null)
public bool? isDeleted { get; set; } //(bit, null)
public bool? isArchived { get; set; } //(bit, null)
public int? DepartmentId { get; set; } //(int, null)
public string EmployeeName { get; set; } //(nvarchar(301), null)
public int? SOP { get; set; } //(nvarchar(50), null)
public int? OnSite { get; set; }
public int? Remote { get; set; }
public string StatusName { get; set; }
public string StaffName { get; set; }
public int StaffID { get; set; }
public enum ActivityTypeEnum
{
None,
Project = 1,
Case = 2,
Development
}
public ICollection<ActivityLines> ActivityLines { get; set; }
private ActivityTypeEnum _activityTypeEnum;
public ActivityTypeEnum CurrentDifficulty
{
get { return _activityTypeEnum; }
set { _activityTypeEnum = value; }
}
}
【问题讨论】:
-
您能否澄清一下您的活动在什么时候返回为空?在您看来,您的存储库,您的控制器操作?目前还不清楚
-
@Marco 请看上面谢谢,
-
在更新调用中你真的需要
.Type(HttpVerbs.Post)吗?另外,当模型本身有一个 ID 时,你为什么要传递一个 ID?
标签: c# asp.net-core model-view-controller kendo-ui kendo-grid