【问题标题】:ModelStateErrors not showing up in ValidationSummaryModelStateErrors 未显示在 ValidationSummary 中
【发布时间】:2016-11-08 14:26:22
【问题描述】:

我的操作中有两个验证,如下所示:

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>

    ...
}

请注意,@Html.ValidationSummary 扩展调用中的 excludePropertyErrors 参数设置为 false,希望我自己使用属性名称以外的键添加到模型状态错误集合中的错误也将显示在摘要中。

但是,上面代码 sn-p 中显示的两条错误消息没有出现在任何地方,既没有出现在验证摘要中,也没有出现在ValidationFor 我认为其中至少有一个的地方,即我添加的那个一个键,应该出现吗?

【问题讨论】:

    标签: asp.net .net asp.net-mvc asp.net-mvc-5


    【解决方案1】:

    看起来您在将错误写入模型状态后正在执行重定向。重定向将丢失模型状态,因为它仅在请求的生命周期内有效,当您重定向时结束。

    解决办法是

    return View(Model) //customise as necessary
    

    而不是你现在的

    return RedirectToAction()
    

    在同一个请求中将响应写回客户端意味着 Modelstate 可以使用,并显示错误。

    【讨论】:

    • 哦,是的。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2011-04-13
    • 2021-06-04
    • 2012-03-25
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多