NikFaraday
@NikFaraday
Student full-stack Developer

Почему ViewData возвращает пустую строку?

Здравствуйте!

При регистрации мне нужно передать соответствующее значение, а точнее, результат, после обработки данных при регистрации и вернуть соответствующую строку для вывода на странице. Я делаю это используя ViewData, но оно возвращает мне пустую строку. Когда я пытаюсь применить метод ToString(), то мне говорится, что мой объект ViewData имеет значение null и я не понимаю в чём проблема.

Код контроллера:
[IgnoreAntiforgeryToken]
        [HttpPost]
        public async Task<IActionResult> Registration([FromBody]UserEntryViewModel viewModel)
        {
            if (!ModelState.IsValid)
            {
                ViewData["ResponseMessage"] = "Invalid data";
                return BadRequest();
            }
            
            UserEntity userEntity = new UserEntity()
            {
                Email = viewModel.Email,
                Login = viewModel.Login,
                Name = viewModel.Name,
                Password = viewModel.Password,
                Type = UserType.Client,
            };

            var user = _userService.GetByEmail(userEntity.Email);
            if (user.Count > 0)
            {
                ViewData["ResponseMessage"] = "Was created";
                return BadRequest();
            }

            _userService.Create(userEntity);
            ViewData["ResponseMessage"] = "Created successfuly";

            return Json(new { success = true });
        }


Код представления:

@using SteamEmart.Web.Models;
@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@model UserEntryViewModel

<h1>@ViewData["ResponseMessage"]</h1>
<div style="margin-left: 40%; margin-right: 40%">
    @Html.ValidationSummary(false, null, new { @class = "text-danger"})
    <form id="userData">

        <h3>Name</h3>
        <input id="name" type="text" placeholder="Vasia"/> <br /> <br />

        <h3>Login</h3>
        <input id="login" type="text" placeholder="Vasiliy"/> <br /> <br />

        <h3>Email</h3>
        <input id="email" type="email" placeholder="vvasia@poshta.com"/>

        <h3>Password</h3>
        <input id="password" type="password" placeholder="Secret"/> <br /> <br />

        <input type="button" id="submitBtn" style="width: 100px"/>
     </form>
</div>

<script src="~/lib/jquery/dist/jquery.js"></script>
<script type="text/javascript">
    $("#submitBtn").bind('click', () => {

        var formData = {
            name: $('#name').val(),
            login: $('#login').val(),
            email: $('#email').val(),
            Password: $('#password').val(),
        }

            $.ajax({
            url: '@Url.Action("Registration", "User")',
            type: 'POST',
            data: JSON.stringify(formData),
            contentType: "application/json; charset=utf-8",
            dataType: 'JSON',
            success: (message) => {
                $('#name').val("");
                $('#login').val("");
                $('#email').val("");
                $('#password').val("");
                alert(@ViewData["ResponseMessage"]);
            },
            error: () => {
                alert(@ViewData["ResponseMessage"]);
            }
        });
    });
</script>
  • Вопрос задан
  • 37 просмотров
Решения вопроса 1
NikFaraday
@NikFaraday Автор вопроса
Student full-stack Developer
Ответ: html разметка генерируется на сервере. При получении разметки отрабатывается метод HttpGet а при отправке данных - HttpPost. Так как я использую Ajax, у меня страница не перегружается и, соответственно, не генерируется разметка заново, значит значение ViewBag, ViewData и так далее не изменяется после отправки данных на сервер через Ajax. Соответственно, значение ViewBad и ViewData имеют стандартные значения, т.е. null.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы