В настоящее время я работаю над простой таблицей MVC CRUD Scaffolded.
И у меня возникли проблемы с реализацией связей.
Просто независимые таблицы работают нормально, это просто каркас модели и все.
Но когда я пытался реализовать связь вот так:
Код: Выделить всё
public class Activo
{
public int id { get; set; }
[Required]
[StringLength(100)]
public string Marca { get; set; }
[Required]
[StringLength(100)]
public string Modelo { get; set; }
[Required]
[StringLength(100)]
public string Tarjeta_Video { get; set; }
public int? ID_Usuario { get; set; }
public int? ID_Procesador { get; set; }
public int? ID_Memoria { get; set; }
public int? ID_DiscoDuro { get; set; }
// Navigation properties
[ForeignKey("ID_Usuario")]
public virtual Usuario Usuario { get; set; }
[ForeignKey("ID_Procesador")]
public virtual Procesador Procesador { get; set; }
[ForeignKey("ID_Memoria")]
public virtual Memoria Memoria { get; set; }
[ForeignKey("ID_DiscoDuro")]
public virtual DiscoDuro DiscoDuro { get; set; }
}
Код: Выделить всё
// GET: Activos/Create
public IActionResult Create()
{
ViewData["ID_DiscoDuro"] = new SelectList(_context.DiscoDuro, "id", "Marca");
ViewData["ID_Memoria"] = new SelectList(_context.Memoria, "id", "Marca");
ViewData["ID_Procesador"] = new SelectList(_context.Procesador, "id", "Marca");
ViewData["ID_Usuario"] = new SelectList(_context.Usuario, "id", "ApellidoMaterno");
return View();
}
// POST: Activos/Create
// To protect from overposting attacks, enable the specific properties you want to bind to.
// For more details, see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public async Task Create([Bind("id,Marca,Modelo,Tarjeta_Video,ID_Usuario,ID_Procesador,ID_Memoria,ID_DiscoDuro")] Activo activo)
{
if (ModelState.IsValid)
{
_context.Add(activo);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
ViewData["ID_DiscoDuro"] = new SelectList(_context.DiscoDuro, "id", "Modelo", activo.ID_DiscoDuro);
ViewData["ID_Memoria"] = new SelectList(_context.Memoria, "id", "Modelo", activo.ID_Memoria);
ViewData["ID_Procesador"] = new SelectList(_context.Procesador, "id", "Modelo", activo.ID_Procesador);
ViewData["ID_Usuario"] = new SelectList(_context.Usuario, "id", "ApellidoMaterno", activo.ID_Usuario);
return View(activo);
}
Код: Выделить всё
Когда я пытаюсь создать Activo, он позволяет мне открыть раскрывающийся список и просмотреть все доступные данные, находящиеся в таблицах Memoria, DiscoDuro и т. д.Но как только я нажимаю «Создать», появляется эта ошибка:
Код: Выделить всё
An unhandled exception occurred while processing the request.
NullReferenceException: Object reference not set to an instance of an object.
Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.GetListItemsWithValueField()
Это заставило меня поверить, что проблема в том, как я их использую. значения.
Я знаю, что, вероятно, он неправильно захватывает входное значение, но, поскольку я новичок в Razor Pages и MVC, я просто не могу на всю жизнь понять, что я делаю, и пока один, как это исправить. . Я просто чувствую себя потерянным.
Я буду очень признателен за любые рекомендации по исправлению, повторному решению этой проблемы или просто какой-либо способ сделать это проще, выполнимее или просто лучше.
Спасибо, что уделили время.
Это полный стек вызовов:
Код: Выделить всё
Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.GetListItemsWithValueField()
Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.GetEnumerator()
System.Collections.Generic.List..ctor(IEnumerable collection)
System.Linq.Enumerable.ToList(IEnumerable source)
Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateGroupsAndOptions(string
ICollection currentValues)
Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateSelect(ViewContext
viewContext, ModelExplorer modelExplorer, строка optionLabel, string
выражение, IEnumerable selectList,
ICollection currentValues, boolallowMultiple, object
htmlAttributes)
Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.Process(TagHelperContext
контекст, вывод TagHelperOutput)
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper.ProcessAsync(TagHelperContext
context, вывод TagHelperOutput)
Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperRunner.RunAsync(TagHelperExecutionContext)
executionContext)
AspNetCoreGeneratedDocument.Views_Activos_Create.b__19_0()
Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperExecutionContext.GetChildContentAsync(bool
useCachedResult, кодировщик HtmlEncoder)
Microsoft .AspNetCore.Mvc.TagHelpers.RenderAtEndOfFormTagHelper.ProcessAsync(TagHelperContext
контекст, вывод TagHelperOutput)
Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperRunner.g__Awaited|0_0(Task
task, TagHelperEx Контекст выполненияКонтекст выполнения , int i, int count)
AspNetCoreGeneratedDocument.Views_Activos_Create.ExecuteAsync()
Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageCoreAsync(IRazorPage
страница, контекст ViewContext)
Microsoft. AspNetCore.Mvc.Razor.RazorView.RenderPageAsync(IRazorPage
страница, контекст ViewContext, bool ignoreViewStarts)
Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderAsync(контекст ViewContext)
Microsoft.AspNetCore. Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ViewContext
viewContext, string contentType, Nullable statusCode)
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ViewContext
viewContext, string contentType, Nullable statusCode)
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ActionContext
actionContext, представление IView, ViewDataDictionary viewData,
ITempDataDictionary tempData, string contentType, Nullable
statusCode)
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.ExecuteAsync(ActionContext
контекст, результат ViewResult)
Microsoft.AspNetCore.Mvc.ViewResult.ExecuteResultAsync(ActionContext
контекст)
Microsoft.AspNetCore .Mvc.Infrastructure.ResourceInvoker.g__Logged|22_0(ResourceInvoker
invoker, результат IActionResult)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|30_0(вызов ResourceInvoker , Task lastTask, State next,
Область области, состояние объекта, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResultExecutedContextSealed
context)
Microsoft.AspNetCore .Mvc.Infrastructure.ResourceInvoker.ResultNext(состояние ссылки следующее, область области ссылки, состояние объекта ссылки, ссылка
bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure. ResourceInvoker.InvokeResultFilters()
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|25_0(ResourceInvoker
invoker, Task LastTask, State next, Область области действия, состояние объекта, bool
isCompleted)Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed
context)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(ref State next, ref Область видимости, ref состояние объекта, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync()
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Logged|17_1(ResourceInvoker
invoker)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Logged|17_1(ResourceInvoker
invoker)
Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext
контекст)
Microsoft.AspNetCore. Authentication.AuthenticationMiddleware.Invoke(HttpContext
контекст)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext
контекст)
Подробнее здесь: https://stackoverflow.com/questions/791 ... folding-an