Member 13427316 Ответов: 1

Как обновить запись с помощью внешнего ключа?


У меня есть таблица с внешним ключом к другой таблице.

Я смог создать MVC для действия Create, но, похоже, не могу понять действие Update.

Я постоянно получаю ошибку: при обработке запроса произошло необработанное исключение.

ArgumentNullException: значение не может быть null.
Имя параметра: источник

ВИРТУАЛЬНАЯ ПАМЯТЬ:
[Required]
[Display(Name = "Name")]
public string Name { get; set; }

[Required]
[Display(Name = "Description")]
public string Description { get; set; }

[Required]
[Display(Name = "Code before element including opening tag")]
public string Before { get; set; }

[Required]
[Display(Name = "Code after element including closing tag")]
public string After { get; set; }

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
    if (Before == null || After == null)
        yield return new ValidationResult("Custom HTML Before and Custom HTML After must be specified");
}

[Required]
[Display(Name = "HTML Element")]
public int HTMLElement { get; set; }

public ICollection<HTMLElement> HTMLElements { get; set; }


Контроллер:
[HttpGet]
public async Task<IActionResult> UpdateCustomizedHTMLElement(int Id)
{
    var eElement = await db.CustomizedElements
.Include(e => e.HTMLElement)
.ThenInclude(e => e.Element)
.SingleOrDefaultAsync(w => w.Id == Id);
    return View(eElement);
}

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult UpdateCustomizedHTMLElement(HTMLElement updateHTMLElement)
{
    return View(updateHTMLElement);
}


Смотреть:

<div class="row justify-content-md-center">
    <div class="col-sm-10 col-md-7 col-lg-6">
        <h2>Update Customized HTML Element Type</h2>
        <form method="post" asp-controller="Templates" asp-action="UpdateCustomizedHTMLElement">
            <div class="form-group">
                <label asp-for="Name"></label>:
                <input class="form-control form-control-sm" type="text" asp-for="Name" />
                <span class="text-danger" asp-validation-for="Name"></span>
            </div>
            <div class="form-group">
                <label asp-for="Before"></label>:
                <input class="form-control form-control-sm" type="text" asp-for="Before" />
                <span class="text-danger" asp-validation-for="Before"></span>
            </div>
            <div class="form-group">
                <label asp-for="HTMLElement"></label>:
                @Html.DropDownListFor(m => m.HTMLElement, new SelectList(Model.HTMLElement.Element, "Id", "Element"), "", new { @class = "form-control" })
                <span class="text-danger" asp-validation-for="HTMLElement"></span>
            </div>
            <div class="form-group">
                <label asp-for="After"></label>:
                <input class="form-control form-control-sm" type="text" asp-for="After" />
                <span class="text-danger" asp-validation-for="After"></span>
            </div>
            <div>
                <button class="btn btn-primary" type="submit" value="Submit">Save</button>
                <button class="btn btn-secondary" type="button" value="Cancel" onclick="location.href='@Url.Action("HTMLElements", "Templates")'">Cancel</button>
            </div>
        </form>
    </div>
</div>


Что я уже пробовал:

Я попытался поискать в Google "Как обновить запись с помощью свойства внешнего ключа .net core", но не нашел ничего, что работает.

1 Ответов

Рейтинг:
1

Dave Kreskowiak

Ваш UpdateCustomizedHTMLElement загружает элемент, который вы, по-видимому, обновляете, но вы никогда не вносите никаких изменений в этот элемент и не сохраняете его обратно в базу данных. Все так просто.

Вы также не передаете ничего, что говорит: "это изменения, которые нужно внести". Вы просто передаете идентификатор элемента для загрузки.


Member 13427316

На данный момент сохранения нет, потому что запись даже не загружается для [httpGet]. После того, как я получу это на работу, я буду работать над методом Post.

На данный момент я получаю эту ошибку, просто пытаясь загрузить объект.