Модель не может быть создана из-за невозможности чтения из функции JQuery - PullRequest
0 голосов
/ 26 сентября 2019

Я новичок в JQuery и .Net, и у меня есть страница бритвы, в которой есть два раскрывающихся меню, где одно раскрывающееся меню зависит от выбранного элемента другого.Я пытаюсь создать модель проекта и сохранить его на сервере SQL.Это требует ProjectName, ProjectDescription, FileUploadPath, UserId и SubCategoryId.Я пытаюсь прочитать SubCategoryId элемента, который я выбрал в раскрывающемся меню Подкатегория, но не удается заполнить свойство, поэтому не удается создать модель.

Сообщение об ошибке: https://gyazo.com/af438a5ca73d161617eebd85d45a1c1f

Это функции JQuery, с которыми у меня возникают проблемы, это средняя:

@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>`);
                            });
                        });
                    });

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

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

                });
            </script>

Это код страницы бритвы:

 [BindProperty(SupportsGet =true)]
        public int CategoryId { get; set; }
        public Category Category { 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; }     //not populated
        [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()
        {
            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));

        }



        public IActionResult OnPost(CreatePortfolioModel model)
        {
            if (ModelState.IsValid)
            {
                string uniqueFileName = null;
                if(model.FileUpload != null)
                {
                    string uploadsFolder = Path.Combine(hostingEnvironment.WebRootPath, "documents");
                    uniqueFileName = Guid.NewGuid().ToString() + "_" + model.FileUpload.FileName;
                    string filePath = Path.Combine(uploadsFolder, uniqueFileName);
                    model.FileUpload.CopyTo(new FileStream(filePath, FileMode.Create));
                }

                Project project = new Project
                {
                    ProjectName = model.ProjectName,
                    ProjectDescription = model.ProjectDescription,
                    FileUploadPath = uniqueFileName,
                    SubCategoryId = model.SubCategoryId,
                    UserId = UserId
                };

                _context.Add(project);
                _context.SaveChanges();

                return RedirectToPage("/Index");
            }

            return Page();

Объект проекта:

public class Project
    {
        [Key]
        public int ProjectId { get; set; }
        [Required(ErrorMessage = "Enter Project Name")]
        public string ProjectName { get; set; }
        public string ProjectDescription { get; set; }
        public string FileUploadPath { get; set; }
        public int SubCategoryId { get; set; }
        public int UserId { get; set; }
    }

Я хочу, чтобы 2-я функция JQuery заполнила свойство SubCategoryId, чтобы я могла передать его для нового проекта в публикацию и сохранить проект на сервере sql.Любая помощь или руководство с благодарностью!

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