ModelState.AddModelError не показывает никаких сообщений на страницах RAZOR asp.net.core - PullRequest
0 голосов
/ 23 января 2019

В своем тестовом проекте ASP.NET.CORE я добавил пользовательскую ошибку ModelState в свою страницу бритвы codeBehind, но она ничего не делает для Html.ValidationMessageFor. Я должен перенаправить метод OnGetAsync (), чтобы не получать исключение nullref

Итак, я попытался заменить форму из всплывающего модального окна, но это не помогает, подключенные сценарии с частичным представлением макета и непосредственно к странице не дают никакого результата, также переименовывая теги.

Это мой код за страницей

namespace TourStats.Pages
{
  public class Index : PageModel
  {
    private readonly TourStats.Models.PlayerStatsDBContext _context;
    public Index(TourStats.Models.PlayerStatsDBContext context)
    {
      _context = context;
    }

    [BindProperty]
    public Table Table { get; set; }
    [BindProperty]
    public IList<Table> Tables { get; set; }

    public async Task OnGetAsync()
    {
      Tables = await _context.Tables.ToListAsync();
    }

    public async Task<IActionResult> OnPostAsync()
    {
      if (ModelState.IsValid && Table != null)
     {
        try
          {
            Table.GameData = DateTime.Now;
            _context.Tables.Add(Table);
            await _context.SaveChangesAsync();
          }
          catch(Exception)
          {                 
            ModelState.AddModelError("Table", "exc1");                    
          }             
      }
        return RedirectToAction("OnGetAsync");                     
    }
  }
}

Это моя страница бритвы

@page
@using System.Runtime.CompilerServices
@using TourStats.Models
@model TourStats.Pages.Index
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers


@{
Layout = "_Layout";    
}

<head>
<!-- MY CSS -->
<link rel="stylesheet" type="text/css" href="~/css/playerPopup.css"/>
<!-- Validation Scripts -->
<script src="lib/jquery/dist/jquery.js"></script>
<script src="lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
<title>MyStats</title>
</head>
<body>
<!-- Create Table Popup Form -->
<div class="container">
<!-- Trigger the modal with a button -->
<button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal">create</button>

<div>
    <!-- Modal -->
    <div class="modal fade" id="myModal" role="dialog">
        <div class="modal-dialog">

            <!-- Modal content-->
            <div class="modal-content">
                <div class="modal-header">    
                    <button type="button" class="close" data-dismiss="modal">&times;</button>
                </div>
                <div class="modal-body">
                    <form method="post">
                        @Html.AntiForgeryToken()

                        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
                        <div class="form-group">
                            <label asp-for="Table.Name">Table name</label>
                            <input asp-for="Table.Name" class="form-control"/>
                            <span asp-validation-for="Table.Name" class="text-danger"></span>
                            @Html.ValidationMessageFor(m => m.Table)
                        </div>
                        <br>
                        <input type="submit" value="Create" class="btn btn-default"/>
                    </form>
                </div>
                <div class="modal-footer">

                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                </div>
            </div>
        </div>
    </div>

</div>

 @section Scripts{
    @await Html.PartialAsync("_ValidationScriptsPartial")
 }

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Вы уверены, что вводите код в блоке catch?

0 голосов
/ 23 января 2019

При перенаправлении вы теряете все, что есть в словаре ModelState. Если есть исключение, вы должны вернуть ту же страницу, как и в случае, если ModelState недействительно:

public async Task<IActionResult> OnPostAsync()
{
    if (ModelState.IsValid && Table != null)
    {
        try
        {
            Table.GameData = DateTime.Now;
            _context.Tables.Add(Table);
            await _context.SaveChangesAsync();
         }
         catch(Exception)
         {                 
             ModelState.AddModelError("Table", "exc1");  
             Tables = await _context.Tables.ToListAsync();
             return Page();                  
         }             
   } 
   else
   {
       Tables = await _context.Tables.ToListAsync();
       return Page(); 
   }
   return RedirectToAction("OnGetAsync");                     
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...