У меня есть модель для файлов 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" })
...