【问题标题】:asp.net Core 2 Razor Pages problem loading partial inside conditionalasp.net Core 2 Razor Pages问题在条件内加载部分
【发布时间】:2019-08-04 21:53:09
【问题描述】:

我创建了一个部分页面视图,它是一个用于显示表单验证错误的框:

<div class="alert alert-danger" role="alert">
<div class="row">
    <div class="col-auto align-self-center">
        <i class="fas fa-times-circle fa-2x"></i>
    </div>
    <div asp-validation-summary="All"></div>
</div>

从主页面视图,我想仅在存在任何验证错误时加载此部分页面视图:

@if (ViewData.ModelState.ErrorCount > 0)
{
    <partial name="Partial/_ValidationErrorSummary"/>
}

当我第一次加载页面时,错误摘要不显示,这正是我想要的。但是当我尝试在页面上提交表单时,什么也没有发生。如果我从主页视图中删除条件 @if (ViewData.ModelState.ErrorCount &gt; 0),我就可以按预期提交表单。我做错了什么?

整页 HTML

@page
@model RegisterModel

@{
    ViewData["Title"] = "Sign Up";
}

<div class="row">
    <div class="col-md-6 offset-md-3">
        <form asp-route-returnUrl="@Model.ReturnUrl" method="post">
            @if (ViewData.ModelState.ErrorCount > 0)
            {
                <partial name="Partial/_ValidationErrorSummary" />
            }
            <div class="form-group">
                <label asp-for="Input.Email">Email</label>
                <input asp-for="Input.Email" class="form-control" />
            </div>
            <div class="form-group">
                <label asp-for="Input.Password">Password</label>
                <input asp-for="Input.Password" type="password"class="form-control" />
            </div>
            <div class="form-group">
                <label asp-for="Input.ConfirmPassword">Confirm Password</label>
                <input asp-for="Input.ConfirmPassword" type="password" class="form-control" />
            </div>
            <button type="submit" class="btn btn-primary btn-lg btn-block">Submit</button>
        </form>
    </div>
</div>

【问题讨论】:

  • 能否请您显示 html 标记以帮助重现?
  • 添加了 Html 标记

标签: asp.net-core razor-pages


【解决方案1】:

仍然无法重现,但提供符合您要求的代码示例,您可以使用您的代码进行检查:

  1. 创建 Razor 页面模板 asp.net 核心应用程序。

  2. Pages 文件夹中创建Partial 文件夹并添加_ValidationErrorSummary.cshtml,使用您的代码。

  3. 创建一个 Razor 页面并使用视图模型:

    public class RegisterModel : PageModel
    {
        [BindProperty]
        public Input Input { get; set; }
    
        public string ReturnUrl { get; set; }
        public void OnGet()
        {
            ReturnUrl = "Create";
        }
    
        public IActionResult OnPost()
        {
            if (ModelState.IsValid)
            {
                // do something
                return RedirectToPage("Contact");
            }
            else
            {
                return Page();
            }
        }
    }
    
    public class Input
    {
    
        [Required]
        public string Email { get; set; }
    
        [Required]
        public string Password { get; set; }
    
        [Required]
        public string ConfirmPassword { get; set; }
    }
    
  4. 将您的 html 放入页面的 html 中。

上述代码按预期工作,如果有任何其他问题,请随时告诉我。

【讨论】:

    猜你喜欢
    • 2018-04-05
    • 2018-10-29
    • 2018-06-07
    • 2020-10-27
    • 2018-02-17
    • 2020-10-04
    • 2020-11-23
    • 2020-11-21
    • 2018-03-30
    相关资源
    最近更新 更多