jquery - 在控制器中获取空值
问题描述
我在为事件传输值时遇到问题。我使用 fullcalendar 和 modal 来检索事件,然后通过 calendar.js 文件中的 sendAddEvent 函数(您可以看到下面的函数)将其进一步发送到 CalendarController ,其中除了将在表中输入的值之外的所有值参与者到达,尽管在 calendar.js 中的 sendAddEvent 函数中所有元素都有值,当他们到达 CalendarController 中的 AddEvent 函数时,有关参与者表的元素没有值。有谁知道是什么原因?谢谢你。
这是我在 calendar.js 中的函数和从表单中获取值的变量:
$('#eventModalSave').click(() => {
const title = $('#EventTitle').val();
const description = $('#Description').val();
const startTime = moment($('#StartTime').val());
const endTime = moment($('#EndTime').val());
const color = ($('#Color').val());
salaID = ($('#salaID').val());
var roomID = parseInt(salaID);
const UserId = ($('#ApplicationUserId').val());
const isAllDay = $('#AllDay').is(":checked");
const isNewEvent = $('#isNewEvent').val() === 'true' ? true : false;
if (startTime > endTime) {
alert('Ora de sfărșit a evenimentului nu poate fi mai mare decât ora de începere');
return;
} else if ((!startTime.isValid() || !endTime.isValid()) && !isAllDay) {
alert('Vă rugăm să introduceți ora de început și sfărșit a evenimentului');
return;
}
const event = {
title,
description,
isAllDay,
startTime: startTime._i,
endTime: endTime._i,
color,
roomID,
};
if (isNewEvent) {
sendAddEvent(event, UserId);
} else {
sendUpdateEvent(event, UserId);
}
});
function sendAddEvent(event, UserId) {
axios({
method: 'post',
url: '/Calendar/AddEvent',
data: {
"Title": event.title,
"Description": event.description,
"Start": event.startTime,
"End": event.endTime,
"AllDay": event.isAllDay,
"color": event.color,
salaID: event.roomID,
"UserId": UserId,
}
})
.then(res => {
const { message, eventId } = res.data;
if (message === '') {
const newEvent = {
start: event.startTime,
end: event.endTime,
allDay: event.isAllDay,
title: event.title,
description: event.description,
color: event.color,
salaID: event.roomID,
UserId: UserId,
eventId
};
$('#calendar').fullCalendar('renderEvent', newEvent);
$('#calendar').fullCalendar('unselect');
$('#eventModal').modal('hide');
} else {
alert(`Something went wrong: ${message}`);
}
})
.catch(err => alert(`Something went wrong: ${err}`));
}
这是我的 CallendarController 中的 AddEvent 函数,其中 UserId 具有空值:
[HttpPost]
public IActionResult AddEvent([FromBody]Event evt, [FromBody] Participants part)
{
string message = String.Empty;
int eventId = 0;
message = AddEvent(evt,part, out eventId);
string AddEvent(Event evt,Participants part, out int eventId)
{
SqlConnection conn = GetConnection();
SqlTransaction trans = conn.BeginTransaction();
eventId = 0;
var userIdlogged = User.FindFirstValue(ClaimTypes.NameIdentifier);
try
{
SqlCommand cmd = new SqlCommand(@"Insert into[Participants]
(UserId
,EventId)
values
(@UserId
,@eventid);
insert into [Events]
(
title
,[description]
,event_start
,event_end
,all_day
,color
,salaID
,ApplicationUserId
)
values
(
@title
,@description
,@start
,@end
,@allDay
,@color
,@salaID
,@ApplicationUserID
);
select scope_identity()", conn, trans)
{
CommandType = CommandType.Text
};
cmd.Parameters.Add("@title", SqlDbType.VarChar).Value = evt.Title;
cmd.Parameters.Add("@description", SqlDbType.VarChar).Value = evt.Description;
cmd.Parameters.Add("@start", SqlDbType.DateTime).Value = evt.Start;
cmd.Parameters.Add("@end", SqlDbType.DateTime).Value = Helpers.ToDBNullOrDefault(evt.End);
cmd.Parameters.Add("@allDay", SqlDbType.Bit).Value = evt.AllDay;
cmd.Parameters.Add("@color", SqlDbType.VarChar).Value = evt.color;
cmd.Parameters.Add("@salaID", SqlDbType.Int).Value = evt.salaID;
cmd.Parameters.Add("@ApplicationUserId", SqlDbType.VarChar).Value = userIdlogged;
cmd.Parameters.Add("@UserId",SqlDbType.VarChar).Value=part.UserId;
cmd.Parameters.Add("@eventid", SqlDbType.Int).Value =eventId;
eventId = Convert.ToInt32(cmd.ExecuteScalar());
trans.Commit();
}
catch (Exception exp)
{
trans.Rollback();
message = exp.Message;
}
finally
{
CloseConnection(conn);
}
return message;
}
return Json(new { message, eventId });
解决方案
使用 [FromBody] 属性时,您只能将一个值(简单或复杂类型)作为参数传递给 Web API 控制器方法。
这是一个演示如何将数据传递给控制器的工作演示。
控制器(测试控制器):
[HttpGet]
public IActionResult AddEvent()
{
return View();
}
[HttpPost]
public IActionResult AddEvent(Event e,Participants p)
{
return View();
}
查看(添加事件):
@{
ViewData["Title"] = "AddEvent";
}
<h1>AddEvent</h1>
<button onclick="AddEvent()">AddEvent</button>
@section scripts{
<script type="text/javascript">
function AddEvent() {
var event = {};
event.Title = "Title";
event.Description = "Description";
event.AllDay = "AllDay";
event.Color = "Color";
event.SalaID = "SalaID";
var participants = {};
participants.UserId = "UserId";
participants.UserName = "UserName";
$.ajax({
type: "POST",
url: "/Tests/AddEvent",
contentType: "application/x-www-form-urlencoded",
data: { e: event, p: participants}
})
}
</script>
}
事件:
public class Event
{
public string Title { get; set; }
public string Description { get; set; }
public string AllDay { get; set; }
public string Color { get; set; }
public string SalaID { get; set; }
}
参与者:
public class Participants
{
public string UserId { get; set; }
public string UserName { get; set; }
}
推荐阅读
- amazon-web-services - 如何在单个 CloudFormation 堆栈上创建 2 个 AWS lambda?
- spring-integration - 如何限制 JdbcPollingChannelAdapter 的事务边界
- azure - 在 Azure 中的何处集中 SSL 证书?
- powershell - 使用 powershell 获取修改为使用 AM/PM 格式化的日期
- powerbi - 如何制作具有多个列名作为选项的切片器
- couchdb - 带有 $or 和 $and 的 CouchDB 索引不起作用,但只有 $and 起作用
- java - 使用 Gradle 5 和 Cucumber-JVM 从不同目录运行 Cucumber
- python - 列表索引超出范围 - 在排序列表中查找重复项
- linux - 如何防止cmake剥离创建的共享库
- excel - 如果另一张纸上的值大于/小于任一值,则在 Excel 中突出显示 2 个单元格