Как просто получить данные формы со страницы индекса в класс индекса - PullRequest
0 голосов
/ 13 мая 2019

Я создал веб-приложение Razor и поместил идентификационные данные в свой проект, как описано здесь:

https://docs.microsoft.com/en-us/aspnet/core/security/authentication/add-user-data?view=aspnetcore-2.2&tabs=visual-studio

Как показано в приведенном ниже коде, у меня есть форма на главной странице.страница, которая показывает, что вы не вошли в систему, и мне нужно передать эти данные формы в метод, чтобы я мог обработать его (он включает API google-maps, но я уже понял эту часть)

  1. Я попытался создать новую модель (TestUser), описывающую данные, которые я хочу захватить, и использовать ее в качестве модели для этой страницы, а затем создать метод на странице Index.cshtml.cs, который связывает формуданные в эту модель и записывают данные в Debug - но ничего не появляется, и дальнейшие тесты (помещая точку останова в этот метод) показывают, что он никогда даже не вызывает этот метод
  2. Я пытался использовать форму HTML POST,но я не могу понять, как должен выглядеть код c # для обработки этого POST

Попытка # 1

Index.cshtml.cs

        public ActionResult CheckUser([Bind("Email", "Postcode")] TestUser user)
        {
            System.Diagnostics.Debug.WriteLine(user.Email);
            System.Diagnostics.Debug.WriteLine(user.Postcode);
            return RedirectToPage("./Index");
        }

Index.cshtml

            <form asp-action="CheckUser">
                <label for="Email" >Email address</label>
                <input type="email" id="Email" class="form-control" placeholder="Email address" required autofocus>
                <label for="Postcode" class="sr-only">Password</label>
                <input type="text" id="Postcode" class="form-control" placeholder="Postcode" required>
                <button class="btn btn-lg btn-primary btn-block" type="submit">Sign Up</button>
            </form>

Попытка # 2

Index.cshtml.cs

???

Index.cshtml

            <form method="post">
                <label for="Email" >Email address</label>
                <input type="email" id="Email" class="form-control" placeholder="Email address" required autofocus>
                <label for="Postcode" class="sr-only">Password</label>
                <input type="text" id="Postcode" class="form-control" placeholder="Postcode" required>
                <button class="btn btn-lg btn-primary btn-block" type="submit">Sign Up</button>
            </form>

Для первой попытки я ожидал, что она напишет сообщение электронной почты и почтовый индекс для отладки, ноничего не появилось.

Я не смог разобраться в формах HTML POST достаточно, чтобы попробовать вторую попытку.

Конечная цель - взять эту информацию из формы на домашней странице и сделатьчто-то с ним (например, написать в Debug)

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Ну, ваша главная проблема в том, что ваши входные данные не имеют атрибутов name. Хотя вы можете просто добавить к ним атрибут name, предпочтительно использовать asp-for, чтобы вызывать тег-помощники, которые, помимо прочего, генерируют правильное имя для привязки.

<input asp-for="Email" class="form-control" placeholder="Email address" required autofocus>

Атрибуты id и type также будут заполняться помощником.

Кроме этого, не используйте Bind. Это плохая идея по ряду разных причин . Вместо этого используйте модель представления, и если все, что вы хотите разрешить редактировать, это Email и PostalCode, то только добавьте эти свойства в класс модели представления. После публикации сопоставьте значения из опубликованной модели представления с экземпляром вашей сущности (новый при создании, новый при извлечении из базы данных при редактировании).

0 голосов
/ 13 мая 2019

Затем вы должны включить их в список включения со словами

    public ActionResult CheckUser([Bind(Include = "Email, Postcode")] TestUser user)
    {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...