C# 剑道UI计划程序:仅删除/编辑/更新指定的事件
我和剑道调度器一起工作,用户可以创建、删除、更新、编辑我的本地数据库中的事件。但我在这个webapp上与不同的用户合作,所以我只希望这些用户能够编辑、删除和更新他们个人创建的事件。所以用户1可以删除用户1创建的事件,但不能删除用户2或3创建的事件,等等 我想我只是修改了模型/控制器,以检查登录用户的userID与事件数据库中的userIDC# 剑道UI计划程序:仅删除/编辑/更新指定的事件,c#,asp.net-mvc,kendo-ui,kendo-scheduler,kendo-ui-mvc,C#,Asp.net Mvc,Kendo Ui,Kendo Scheduler,Kendo Ui Mvc,我和剑道调度器一起工作,用户可以创建、删除、更新、编辑我的本地数据库中的事件。但我在这个webapp上与不同的用户合作,所以我只希望这些用户能够编辑、删除和更新他们个人创建的事件。所以用户1可以删除用户1创建的事件,但不能删除用户2或3创建的事件,等等 我想我只是修改了模型/控制器,以检查登录用户的userID与事件数据库中的userID public virtual JsonResult Meetings_Destroy([DataSourceRequest] DataSourceReques
public virtual JsonResult Meetings_Destroy([DataSourceRequest] DataSourceRequest request, MeetingViewModel meeting)
{
var userid = System.Convert.ToInt32(Session["userID"]);
if (ModelState.IsValid)
{
if (meeting.UserID== userid)
{
meetingService.Delete(meeting, ModelState);
}
else
{
"cant delete"
}
}
return Json(new[] { meeting });
}
但这似乎不起作用,当单击delete时,事件消失,但在重新加载后,您会看到它实际上并没有从db中删除。。。这当然不是一个好的解决方案,因为目标当然是用户不能删除该事件
有什么想法吗
查看
$(function () {
$("#scheduler").kendoScheduler({
date: new Date(Date.now()),
startTime: new Date(2013, 5, 13, 9, 0, 0, 0),
height: 800,
timezone: "Etc/UTC",
dataSource: {
transport: {
read: {
url: "@Url.Action("Meetings_Read", "Home")",
dataType: "json",
contentType: "application/json; charset=utf-8",
type: "POST"
},
update: {
url: "@Url.Action("Meetings_Update", "Home")",
dataType: "json",
contentType: "application/json; charset=utf-8",
type: "POST"
},
create: {
url: "@Url.Action("Meetings_Create", "Home")",
dataType: "json",
contentType: "application/json; charset=utf-8",
type: "POST"
},
destroy: {
url: "@Url.Action("Meetings_Destroy", "Home")",
dataType: "json",
contentType: "application/json; charset=utf-8",
type: "POST"
},
parameterMap: function (options, operation) {
if (operation === "read") {
var scheduler = $("#scheduler").data("kendoScheduler");
var result = {
start: scheduler.view().startDate(),
end: scheduler.view().endDate()
}
return kendo.stringify(result);
}
return kendo.stringify(options);
}
},
error: error_handler,
schema: {
model: {
id: "MeetingID",
fields: {
MeetingID: { type: "number" },
title: { from: "Title", type: "string", defaultValue: "No title", validation: { required: true } },
description: { from: "Description", type: "string" },
start: { from: "Start", type: "date" },
startTimezone: { from: "StartTimezone", type: "string" },
end: { from: "End", type: "date" },
endTimezone: { from: "EndTimezone", type: "string" },
recurrenceRule: { from: "RecurrenceRule", type: "string" },
recurrenceId: { from: "RecurrenceID", type: "number", defaultValue: null },
recurrenceException: { from: "RecurrenceException", type: "string" },
isAllDay: { from: "IsAllDay", type: "boolean" },
Timezone: { type: "string" },
RoomID: { type: "number", defaultValue: null },
Attendees: { type: "object" }
}
}
}
},
});
});
JAVASCRIPT
<script type="text/javascript">
function error_handler(e) {
if (e.errors) {
var scheduler = $("#scheduler").data("kendoScheduler");
scheduler.one("dataBinding", function (e) {
e.preventDefault();
for (var error in e.errors) {
alert("can't delete")
}
})
var message = "Errors:\n";
$.each(e.errors, function (key, value) {
if ('errors' in value) {
$.each(value.errors, function () {
message += this + "\n";
});
}
});
alert(message);
}
}
ModelState.addmodeleror(“无法删除”);
返回Json(ModelState.ToDataSourceResult())代码>
在视图中
.Read("Grouping_Horizontal_Read", "Scheduler")
.Create("Grouping_Horizontal_Create", "Scheduler")
.Destroy("Grouping_Horizontal_Destroy", "Scheduler")
.Update("Grouping_Horizontal_Update", "Scheduler")
.Events(events => events.Error("error"))
.Events(Events=>Events.Error(“Error”))是技巧,现在是错误的重要功能
function error(args) {
if (args.errors) {
var scheduler = $("#scheduler").data("kendoScheduler");
scheduler.one("dataBinding", function (e) {
e.preventDefault(); // cancel scheduler rebind if error occurs
for (var error in args.errors) {
alert(error + " args: " + args.errors[error].errors[0])
}
});
args.sender.cancelChanges();
}
}
ModelState.addmodeleror(“无法删除”);
返回Json(ModelState.ToDataSourceResult())代码>
在视图中
.Read("Grouping_Horizontal_Read", "Scheduler")
.Create("Grouping_Horizontal_Create", "Scheduler")
.Destroy("Grouping_Horizontal_Destroy", "Scheduler")
.Update("Grouping_Horizontal_Update", "Scheduler")
.Events(events => events.Error("error"))
.Events(Events=>Events.Error(“Error”))是技巧,现在是错误的重要功能
function error(args) {
if (args.errors) {
var scheduler = $("#scheduler").data("kendoScheduler");
scheduler.one("dataBinding", function (e) {
e.preventDefault(); // cancel scheduler rebind if error occurs
for (var error in args.errors) {
alert(error + " args: " + args.errors[error].errors[0])
}
});
args.sender.cancelChanges();
}
}
在我的项目中,我有一个类似的情况,我的用户在日历上做事情的权限有限。我发现您必须防止添加、编辑和删除这些用户不应该做的事情,您可以通过JavaScript事件来做到这一点。然后,在JavaScript函数中,如果满足(或不满足)条件,则调用e.preventDefault();方法
查看(HTML 5代码段)
查看(MVC版本片段)
JavaScript
function AddMe (e) {
if (SomeValue != SomeOtherValue)
e.preventDefault();
};
function EditMe (e) {
if (SomeValue != SomeOtherValue)
e.preventDefault();
};
function RemoveMe (e) {
if (SomeValue != SomeOtherValue)
e.preventDefault();
};
因此,好消息是,这会阻止日历显示更新(无论是否发生删除),但不会阻止删除提示(即“是否确实要删除此事件?”)。防止客户端的操作是一个好办法,您可以通过向屏幕发出警报或通知来扩展它(因为您无论如何都会在JavaScript函数中遇到这种情况),所有这些都是为了通知用户他们不能做一些事情。我的项目也有类似的情况,我的用户在日历上做事情的权限有限。我发现您必须防止添加、编辑和删除这些用户不应该做的事情,您可以通过JavaScript事件来做到这一点。然后,在JavaScript函数中,如果满足(或不满足)条件,则调用e.preventDefault();方法
查看(HTML 5代码段)
查看(MVC版本片段)
JavaScript
function AddMe (e) {
if (SomeValue != SomeOtherValue)
e.preventDefault();
};
function EditMe (e) {
if (SomeValue != SomeOtherValue)
e.preventDefault();
};
function RemoveMe (e) {
if (SomeValue != SomeOtherValue)
e.preventDefault();
};
因此,好消息是,这会阻止日历显示更新(无论是否发生删除),但不会阻止删除提示(即“是否确实要删除此事件?”)。防止客户端的操作是一个好办法,您可以通过在屏幕上显示警报或通知来扩展它(因为JavaScript函数中会有这种情况),所有这些都是为了通知用户他们不能做什么。这也取决于您创建会议的方式
因为要删除任务,您只需要一个唯一的ID
现在它只是在JSON中被删除,而不是在后端数据库中,因为我猜meeting.id与触发create事件时生成的taskID不匹配
我建议在计划程序中创建任务时,将taskID保存在ViewBag、SQL表或其他地方。然后在触发remove事件时,将此id作为参数传递给Meetings\u Destroy方法
并且[如前一个回答中所述]使用JavaScript remove事件来验证登录用户,因为e.preventDefault()可以用于限制在不满足条件的情况下触发的Destroy方法。如果在控制器方法[Meetings\u Destroy]中达到调试,它将从调度程序中删除事件[在数据库中是否成功删除],即从前端删除,但会在页面刷新时将其恢复。这也取决于您创建会议的方式
因为要删除任务,您只需要一个唯一的ID
现在它只是在JSON中被删除,而不是在后端数据库中,因为我猜meeting.id与触发create事件时生成的taskID不匹配
我建议在计划程序中创建任务时,将taskID保存在ViewBag、SQL表或其他地方。然后在触发remove事件时,将此id作为参数传递给Meetings\u Destroy方法
并且[如前一个回答中所述]使用JavaScript remove事件来验证登录用户,因为e.preventDefault()可以用于限制在不满足条件的情况下触发的Destroy方法。如果在控制器方法[Meetings\u Destroy]中达到调试,它将从调度程序中删除事件[在数据库中成功删除或未成功删除],即从前端删除,但会在页面刷新时将其恢复。我也有同样的情况。我采取了不同的方法来解决它。在编辑功能中,我比较任务id和当前用户id,然后简单地隐藏保存、取消和删除按钮。这些按钮将仅用于创建该按钮的用户
function(e)
{
var customHide13= $(".k-scheduler-update, .k-scheduler-delete, .k-scheduler-cancel");
if (taskId == userId)
customHide13.show();
else
customHide13.hide();
},
我也有同样的情况。我采取了不同的方法来解决它。在编辑功能中,我比较任务id和当前用户id,然后简单地隐藏保存、取消和删除按钮。这些按钮将仅用于创建该按钮的用户
function(e)
{
var customHide13= $(".k-scheduler-update, .k-scheduler-delete, .k-scheduler-cancel");
if (taskId == userId)
customHide13.show();
else
customHide13.hide();
},
可以说没有看到AJAX代码没有任何自定义AJAX代码,只使用telerik的开源脚本;可以说没有看到AJAX代码没有任何自定义AJAX代码,只使用telerik的开源脚本返回Json(ModelState.ToDataSourceResult());在ModelState.addmodeleror(“,”不能删除“)下,可以更改