Я пытаюсь обновить модель курса, добавив свойство изображения, чтобы, например, администратор сайта мог загрузить
изображение курса при создании нового курса или при редактировании существующего.
Это моя модель курса.
public class Course
{
public int CourseID { get; set; }
[Display(Name = "Course Code")]
public string CourseCode { get; set; }
[Display(Name = "Course Name")]
public string Title { get; set; }
public string Image { get; set; }
public int Credits { get; set; }
public int DepartmentID { get; set; }
public string SmallSescription { get; set; }
public string BigDescription { get; set; }
[DataType(DataType.Date)]
[Display(Name ="Date Launched")]
public DateTime DateLaunched { get; set; }
public Department Department { get; set; }
public ICollection<Enrollment> Enrollments { get; set; }//many to many relationship with student
public ICollection<CourseAssignment> CourseAssignments { get; set; }//many relationship with instructor.
}
Это страница бритвы для создания модели курса.
@page
@model MyNamespace.CreateModel
@{
ViewData["Title"] = "Create Course";
}
<h2>Create Course</h2>
<div class="row">
<div class="col-md-4">
<form method="post" enctype="multipart/form-data">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
@*markup removed for simplicity*@
<div class="form-group">
<label asp-for="Course.Image" class="control-label"></label>
<input type="file" name="files" multiple class="form-control" />
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</form>
</div>
</div>
<div>
<a asp-page="Index">Back to List</a>
</div>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
и это метод OnPostAsync для CreateModel,
namespace MyNamespace
{
public class CreateModel :PageModel
{
//other code removed for simplicity
[BindProperty]
public Course Course { get; set; }
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
var emptyCourse = new Course();
if (await TryUpdateModelAsync<Course>(emptyCourse, "course", // Prefix for form value.
s => s.CourseCode, s => s.CourseID, s => s.DepartmentID, s => s.Title, s => s.Credits,s => s.Image))
{
_context.Courses.Add(emptyCourse);
await _context.SaveChangesAsync();
}
//image being saved
var files = HttpContext.Request.Form.Files;
if (files[0] != null && files[0].Length > 0)
{
//save the extension name as well as images folder path inside the image proiperty of every course
}
else
{
//save a default image
}
return RedirectToPage("./Index");
}
}
}
Я хочу получить файлы в HttpContext, используя var files = HttpContext.Request.Form.Files;
, чтобы я мог сохранить путь к изображению в базе данных.
но files.Count;
равно нулю, когда изображение не загружено. Поэтому код
if (files[0] != null && files[0].Length > 0)
{
//save the extension name as well as images folder path inside the image proiperty of every course
}
выдает исключение.
Как я могу решить это? Я хочу, чтобы свойство Image содержало путь к изображению для курса.
Есть ли лучший способ получить файлы, отправленные с запросом http?