我的行动中有两个验证:
if (viewModel.IssuePDFFile == null || viewModel.IssuePDFFile.ContentLength == 0)
{
ModelState.AddModelError("", "Please select a file to upload.");
if (selectedJournalId > 0)
{
return RedirectToAction("CreateNewIssue", new { journalId = selectedJournalId });
}
else
{
return RedirectToAction("CreateNewIssue",
new { journalId = selectedJournalId, journalName = viewModel.JournalName });
}
}
var fileInfo = new FileInfo(viewModel.IssuePDFFile.FileName);
if (!StaticData.AcceptedContentTypes.Contains(viewModel.IssuePDFFile.ContentType,
StringComparer.InvariantCultureIgnoreCase) ||
!fileInfo.Extension.Equals(".pdf", StringComparison.InvariantCultureIgnoreCase))
{
ModelState.AddModelError("IssuePDFFile", "You can only select a PDF file.");
if (selectedJournalId > 0)
{
return RedirectToAction("CreateNewIssue", new { journalId = selectedJournalId });
}
else
{
return RedirectToAction("CreateNewIssue", new { journalId = selectedJournalId,
journalName = viewModel.JournalName });
}
}
在我看来,我有这个:
@using (Html.BeginForm(...)
{
@Html.ValidationSummary(false, "", new { @class = "text-danger" })
@*File*@
<div class="form-group">
@Html.LabelFor(model => model.IssuePDFFile, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-12">
<input type="file" id="File" name="issuePDFFile" placeholder="Select a file to upload" />
@Html.ValidationMessageFor(model => model.IssuePDFFile, "", new { @class = "text-danger" })
</div>
</div>
...
}
请注意,excludePropertyErrors
扩展名调用中的@Html.ValidationSummary
参数设置为false
,希望我自己添加到模型的错误状态错误集合使用其他键比我的财产名称也会出现在摘要中。
但是,上面的代码段中显示的两条错误消息都没有显示在任何地方,无论是在验证摘要中,还是在我认为至少其中一个的ValidationFor
地方,我添加的那个一个关键,应该出现吗?
答案 0 :(得分:3)
在向模型状态写入错误后,您似乎正在执行重定向。重定向将松散模型状态,因为它仅在请求的生命周期内有效,并在重定向时结束。
解决方案是
return View(Model) //customise as necessary
而不是你当前的
return RedirectToAction()
在同一个reuqest中将响应写回客户端意味着可以使用Modelstate,并显示错误。