Я использую 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 и предположил, что свойства модели оставлены инициализированными на время действия страницы, пока не будет иначе.Я попытался найти похожие вопросы, и большинство из них связано со сбросом свойств модели между представлениями или контроллерами, но у меня на одной странице, но с разными методами обработки.Как я могу поддерживать свойства модели на протяжении всей страницы?