Свойства модели сбрасываются в Null после выполнения каждого обработчика в - PullRequest
0 голосов
/ 26 сентября 2019

Я использую asp.net с бритвенными страницами, и у меня есть два раскрывающихся меню, в которых одно раскрывающееся меню заполняется выбранным элементом другого с помощью функции JQuery.Моя проблема в том, что у меня есть методы-обработчики для заполнения выпадающего меню «Категория» (первое выпадающее меню) и выпадающего меню «Подкатегория» (второе выпадающее меню, которое зависит от предыдущего).После выхода из этих методов-обработчиков свойства, которые были инициализированы, теперь равны нулю.Я хочу, чтобы эти свойства оставались инициализированными до тех пор, пока они не будут изменены, чтобы я мог использовать их значения в сообщении и отправлять информацию на сервер sql.

Это мои свойства и конструктор в верхней части моей страницы Razor:

readonly DatabaseContext _context;

        private readonly ICategoryService categoryService;
        private readonly IProjectService projectService;
        private readonly IHostingEnvironment hostingEnvironment;



        [BindProperty(SupportsGet =true)]
        public int CategoryId { get; set; }
        [BindProperty]
        public Project Project { get; set; }   
        public SelectList categorylist { get; set; }

        [Required]
        public string ProjectName { get; set; }
        public string ProjectDescription { get; set; }
        public IFormFile FileUpload { get; set; }
        [BindProperty]
        public int SubCategoryId { get; set; }
        [BindProperty(SupportsGet = true)]
        public int UserId { get; set; }



        public CreatePortfolioModel(ICategoryService categoryService, IProjectService projectService, DatabaseContext context,
                                    IHostingEnvironment hostingEnviornment)
        {
            this.categoryService = categoryService;
            this.projectService = projectService;
            this.hostingEnvironment = hostingEnviornment;
            _context = context;
        }

Здесь я заполняю каждое раскрывающееся меню:

//Used to populate the category dropdownlist
        public void OnGet()
        {
            //This initialized UserId property but is null when this method finishes
            UserId = Convert.ToInt32(HttpContext.Session.GetString("SessionUserId"));             categorylist = new SelectList(categoryService.GetCategories(), nameof(Category.CategoryId), nameof(Category.CategoryName));
        }

        //Used to populate the subcategory dropdownlist
        public JsonResult OnGetSubCategories()
        {
            int SessionUserId = Convert.ToInt32(HttpContext.Session.GetString("SessionUserId"));
            return new JsonResult(categoryService.GetSubCategories(CategoryId, SessionUserId));

        }

Метод Postотправлять информацию на сервер sql, но никогда не выполняется из-за параметра CreatePortfolioModel

 public IActionResult OnPost(CreatePortfolioModel model)
{
        ...
}


View:

<span class="control-group form-group">
    <span class="controls">
        <label asp-for="CategoryId">Category:  </label>
        <select asp-for="CategoryId" asp-items="Model.categorylist">
            <option value="">---Select Category---</option>
        </select>


        <label asp-for="SubCategoryId">Subcategory:</label>
        <select asp-for="SubCategoryId"><option value="">---Select Subcategory---</option></select>
        @section scripts{
            <script>
                $(function () {
                    $("#CategoryId").on("change", function () {
                        var categoryId = $(this).val();
                        $("#SubCategoryId").empty();
                        $("#SubCategoryId").append("<option value=''>---Select Subcategory---</option>");
                        $.getJSON(`?handler=SubCategories&categoryId=${categoryId}`, (data) => {
                            $.each(data, function (i, item) {
                                $("#SubCategoryId").append(`<option value="${item.subCategoryId}">${item.subCategoryName}</option>`);
                            });
                        });
                    });



                    $(document).ready(function () {
                        $('.custom-file-input').on("change", function () {
                            var filename = $(this).val().split("\\").pop();
                            $(this).next('.custom-file-label').html(filename);
                        });

                        $("#SubCategoryId").on("change", function () {
                             model.SubCategoryId = $(this).subCategoryId;
                        });
                    });

                });
            </script>

        }

    </span>
</span>


<form enctype="multipart/form-data" method="post">
    <div class="row">
        <div class="col-md-4">
            <label asp-for="ProjectName"></label>
            <input asp-for="ProjectName" class="form-control" />
            <span class="alert-danger" asp-validation-for="ProjectName"></span>
        </div>
    </div>

    <div class="row">
        <div class="col-md-4">
            <label asp-for="ProjectDescription"></label>
            <input asp-for="ProjectDescription" class="form-control" />
        </div>
    </div>

    <div class="for-group-row">
        <label asp-for="FileUpload" class="col-sm-2 col-form-label"></label>
        <div class="col-md-4">
            <div class="custom-file">
                <input asp-for="FileUpload" class="form-control custom-file-input" />
                <label class="custom-file-label">Choose File</label>
            </div>
        </div>
    </div>

    <div class="form-group row">
        <div class="col-sm-10">
            <button type="submit" class="btn btn-primary">Create</button>
        </div>
    </div>
</form>

Где я ошибаюсь?Я новичок в asp.net и предположил, что свойства модели оставлены инициализированными на время действия страницы, пока не будет иначе.Я попытался найти похожие вопросы, и большинство из них связано со сбросом свойств модели между представлениями или контроллерами, но у меня на одной странице, но с разными методами обработки.Как я могу поддерживать свойства модели на протяжении всей страницы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...