c# - “InvalidDataException:超出表单值计数限制 1024。” 在 asp.net 核心中将超过 1000 个值从视图发布到控制器时,模型为 null
问题描述
我正在尝试根据角色向选定的候选人发送批量电子邮件。当我选择有限的选项时,模型会正确传递,但是一旦我从multiselect
下拉列表中选择超过 1000 个选项并从模型中发布传递 null。
很奇怪,有什么原因吗?
电子邮件模板视图模型
public class EmailTemplateViewModel
{
public EmailTemplateViewModel()
{
LstEmailTemplate = new List<EmailTemplateModel>();
SendEmailModel = new SendEmailModel();
}
public List<EmailTemplateModel> LstEmailTemplate { get; set; }
public Pager Pager { get; set; }
public SendEmailModel SendEmailModel { get; set; }
}
看法
@model Practise.Models.EmailTemplateViewModel
@using (Html.BeginForm("SentBulkEMail", "EmailTemplate", FormMethod.Post, new { @class = "form-horizontal" }))
{
@Html.HiddenFor(x => x.SendEmailModel.EmailTemplateId, new { id = "hdnEmailTemplateId" })
<div class="form-group">
<label class="col-lg-2 control-label">User Type</label>
<div class="col-lg-10">
@Html.DropDownListFor(x => x.SendEmailModel.Roles, new SelectList(Roles, "Value", "Text"), new { id = "Roles", @class = "form-control select2", multiple = "multiple", @required = "required" })
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">Recipients</label>
<div class="col-lg-10">
@Html.DropDownListFor(x => x.SendEmailModel.Recipient, new SelectList(ViewBag.Recipient as IEnumerable<SelectListItem>), "", new { id = "Recipients", multiple = "multiple", @required = "required", @class = "form-control" })
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">Subject</label>
<div class="col-lg-10">
@Html.TextBoxFor(x => x.SendEmailModel.Subject, new { id = "subject", @class = "form-control", @required = "required" })
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">Message</label>
<div class="col-lg-10">
@Html.TextAreaFor(x => x.SendEmailModel.Description, new { id = "hdndescription", @class = "form-control", @required = "required" })
</div>
</div>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-primary" type="submit">Send</button>
<button class="btn btn-danger" type="button" data-dismiss="modal">Close</button>
</div>
</div>
}
控制器
[HttpPost]
public async Task<IActionResult> SentBulkEMail(EmailTemplateViewModel emailTemplateViewModel)
{
CustomResponseModel response = new CustomResponseModel();
response = await _emailTemplateService.SentBulkEmail(Request);
if (response.IsSuccess)
{
TempData[Constant.Success] = response.Message;
}
else
{
TempData[Constant.Error] = response.Message;
}
return RedirectToAction("List");
}
您可以从下图中获得更好的想法:
Controller when select 4 options
第二选择超过1000
解决方案
最后我找到了答案。
默认请求值限制为1024
.
为此,我们需要使用RequestFormLimits属性设置请求限制,如下所示:
[HttpPost]
[RequestFormLimits(ValueCountLimit = Int32.MaxValue)]
public async Task<IActionResult> SentBulkEMail(SendEmailModel emailModel)
{
}
使用ValueCountLimit添加此属性后,允许请求值最多,Int32.MaxValue
或者您可以根据您的要求进行设置。
推荐阅读
- python - 计算正确答案
- excel - VBA中的日期格式转换
- python-3.x - 如何使用 xlsxwriter 在数据框周围设置边框?
- oracle - Oracle分层SQL - 循环子句或看到元素的集合?
- firefox - 当有人安装我的 Firefox 扩展程序时,我如何打开网页?
- python - tensorflow.keras.losses.cosine_similarity 在 TensorFlow 1.15 中返回正值
- julia - 如何在 Pkg REPL 中使用 preserve 关键字?
- python - 如何将 pandas.DataFrame 均匀地分成 n 组?
- bash - Bash,从没有'\ n'字符的txt文件行中获取数组
- javascript - 使整行可点击