«Оператор INSERT конфликтовал с ограничением FOREIGN KEY» Ошибка для свойства модели PDF в представлении создания - PullRequest
1 голос
/ 17 апреля 2019

У меня есть модель для файлов PDF, которые идут на определенные веб-страницы в зависимости от того, какие документы они представляют.Вместо того, чтобы обрабатывать это каждый раз при загрузке PDF-файлов, я назначил свойство, которое буду использовать в Razor HTML, чтобы размещать ссылки на документы на правильной странице.Таким образом, клиент может выбрать, на какую веб-страницу будет загружен каждый PDF-файл.

Проблема заключается в том, что я получаю сообщение об ошибке каждый раз, когда Создать представление для сообщений PDF-файлов:

Оператор INSERT конфликтовал с ограничением FOREIGN KEY "FK_dbo.PDFBidsLists_dbo.PDFIdentifier_PDFIdentifierID".Конфликт произошел в базе данных «FoodService», таблица «dbo.PDFIdentifier», столбец PDFIdentifierID '.

Я проверил, и PDFIdentifers существует в базе данных, и они отображаются в заполненном раскрывающемся спискев представлении создания

я предполагаю, что с параметром enctype = "multipart/form-data" в методе BeginForm я должен явно назначить SelectListItem.SelectedValue свойству PDFIdentifierID объекта PDFBidsList,в зависимости от того, как должны быть назначены и другие свойства (и что значение свойства не входит в объект модели, передаваемый в метод Create ).Но после ряда поисков и различных попыток я не смог этого сделать.

Как получить значение SelectListItem, назначенное свойству объекта модели PDF?

PDFIdentifer Model

public class PDFIdentifier
{
    public int PDFIdentifierID { get; set; }

    public string Location { get; set; }        

    public virtual ICollection<PDFBidsLists> PDFBidsLists { get; set; } 
}

PDFBidsLists Model

public int PDFIdentifierID { get; set; }    

[ForeignKey("PDFIdentifierID")]
public virtual PDFIdentifier PDFIdentifier { get; set; }    

PDFBidsList Controller Создание методов GET и POST

public ActionResult Create()
    {
...
        ViewBag.PDFsIDList = new SelectList(db.PDFIdentifier, 
        "PDFIdentifierID", "Location"); 
...
    }

 public ActionResult Create([Bind(Include = "PDFBidsListID, PDFTitle, FileName, Content, FileType, PDFIdentifierID")] PDFBidsLists pDFBidsLists, HttpPostedFileBase upload)
    {
        //Check if PDF File input box has a file path entered.
        if (upload != null && upload.ContentLength > 0)
        {
            string PDFName = System.IO.Path.GetFileName(upload.FileName);
            //Set up the PDF file object.
            var NewPDFFile = new PDFBidsLists { FileName = System.IO.Path.GetFileName(upload.FileName), FileType = FileType.CNLabel };

            //Read the file bytes into the Content property of the CNLabel object.
            using (var reader = new System.IO.BinaryReader(upload.InputStream))
            {
                NewPDFFile.Content = reader.ReadBytes(upload.ContentLength);
            }


            NewPDFFile.PDFTitle = pDFBidsLists.PDFTitle;

            db.PDFBidsLists.Add(NewPDFFile);
            db.SaveChanges();

            return RedirectToAction("Index", "Admin");
        }           

        return View(pDFBidsLists);
    }

PDFBidsLists Создать представление

...
@Html.DropDownListFor(model => model.PDFIdentifier.PDFIdentifierID, ( 
IEnumerable<SelectListItem>)ViewBag.PDFsIDList, "Select Location", new { 
@class = "form-control" })
...

1 Ответ

0 голосов
/ 17 апреля 2019

Неважно, я понял.

В представлении создания:

@Html.DropDownListFor(model => model.PDFIdentifierID, (SelectList)ViewBag.PDFsIDList, 
"Select Location", new { @class = "form-control" })

В способе создания поста контроллера:

NewPDFFile.PDFIdentifierID = pDFBidsLists.PDFIdentifierID;
...