Asp. Net Обработчик страницы бритвы неправильно вызывает методы C# - PullRequest
0 голосов
/ 13 февраля 2020

Как дела, ребята. Я нахожусь в процессе создания веб-приложения с asp. net. У меня есть обработчик OnPostTest (), который срабатывает, когда я публикую данные из моей формы на странице Model. Затем я хотел бы передать полученные данные некоторым методам, хранящимся в других частях проекта, для дальнейшей обработки, именно здесь происходит моя проблема. Когда метод OnPostTest () запускается, он не позволяет мне создавать экземпляр другого класса или вызывать метод другого класса. Достигнув этой точки в функции, приложение продолжает загружаться на веб-странице, но не вызывает метод и не передает данные, оно просто останавливается. Я совершенно запутался в том, почему это происходит. Если бы кто-то мог помочь мне сузить это, я был бы очень благодарен, Спасибо!

Код для OnPostTest ():

public void OnPostTest()
        {
            //Ensure the Data has been Correctly Entered into the form.
            if (!ModelState.IsValid)
            {
                error = "The Data was not In the correct form,Please try again.";
                BfvEncryption bfv = new BfvEncryption();
                //return Page();

            }
            error = "Is this working";

            //return RedirectToPage("/Index", new { city = UserData.Address });
        }

Просмотр:

@page
@model Produce_WebApp.userData
@{
    ViewData["Title"] = "UserDataInput";
    @Model.error;
}

<h1>UserDataInput</h1>
<form method="post" asp-page-handler="test">
    <input type="text" asp-for="UserData.FirstName" placeholder="FirstName" />
    <input type="text" asp-for="UserData.Address" placeholder="Address" />
    <input type="text" asp-for="UserData.Age" placeholder="Age" />
    <input type="text" asp-for="UserData.Weight" placeholder="Weight" />
    <input type="text" asp-for="UserData.Height" placeholder="Height" />
    <input type="text" asp-for="UserData.WaterPerDay" placeholder="Water Per Day" />
    <input type="text" asp-for="UserData.Sleep" placeholder="Sleep" />
    <p>
        <h1>Career</h1>
    </p>
    <input type="text" asp-for="UserData.Salary" placeholder="Salary" />
    <input type="text" asp-for="UserData.Breaks" placeholder="Breaks" />
    <input type="text" asp-for="UserData.HoursPerDay" placeholder="Hours Worked Per Day" />

    <Button type="submit" />
</form>

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Используете ли вы систему ASP. NET Внедрение зависимостей ядра ? Он внедряет экземпляр класса в конструктор вашей PageModel, чтобы экземпляр (или новый экземпляр) был доступен при обновлении страницы.

public class YourPageModel : PageModel
{
    public IBfvEncryption _bfvEncryption { get; set; }

    public YourPageModel(IBfvEncryption bfvEncryption)
    {
        _bfvEncryption = bfvEncryption;
    }

    public class InputModel
    {
        [Required]
        public string FirstName { get; set; }

        [Required]
        public string Address { get; set; }

        // ... etc.
    }

    public void OnPostTest()
    {
        //Ensure the Data has been Correctly Entered into the form.
        if (!ModelState.IsValid)
        {
            error = "The Data was not In the correct form,Please try again.";

            // _bfvEncryption is available to you here now.
            // return Page();
        }

        error = "Is this working";

        //return RedirectToPage("/Index", new { city = InputModel.Address });
    }
}
0 голосов
/ 13 февраля 2020

Попробуйте это:

[HttpPost]
public EmptyResult OnPostTest()
        {
            //Ensure the Data has been Correctly Entered into the form.
            if (!ModelState.IsValid)
            {
                error = "The Data was not In the correct form,Please try again.";
                BfvEncryption bfv = new BfvEncryption();
                return new EmptyResult();

            }
            error = "Is this working";
         return new EmptyResult();
        }
...