Я создаю очень простую форму загрузки файла asp.net MVC.
В настоящее время у меня проблема с созданием нового объекта базы данных, в котором хранится информация в указанном файле.
Код для метода действия выглядит следующим образом:
[Authorize(Roles = "Admin")]
public ActionResult AddFile(Guid? id)
{
var org = organisationRepository.GetOrganisationByID(id.Value);
Quote newFile = new Quote();
newFile.Organisation = org;
newFile.QuotedBy = User.Identity.Name;
return View("AddFile", newFile);
}
Проблема в том, что значение newFile.Organisation теряется при отправке формы обратно. Я полагаю, что EF не предоставляет значение для OrganisationID на этом этапе.
[Authorize(Roles = "Admin")]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AddFile(Quote quote)
{
//save the file to the FS - nice!
if (ModelState.IsValid)
{
try
{
foreach (string inputTagName in Request.Files)
{
HttpPostedFileBase file = Request.Files[inputTagName];
if (file.ContentLength > 0)
{
string filePath = Path.Combine(HttpContext.Server.MapPath("~/Content/TempOrgFiles/")
, Path.GetFileName(file.FileName));
file.SaveAs(filePath);
quote.QuoteURL = file.FileName;
}
}
surveyRepository.AddQuote(quote);
surveyRepository.Save();
}
catch (Exception ex)
{
//add model state errors
ViewData["error"] = ex.Message;
}
}
return View("AddFile");
}
Если бы это было linq to sql, я бы упростил настройку OrganisationID, но с EF это невозможно (по крайней мере, с моей настройкой)
Какие-нибудь идеи как лучший способ справиться с этими ситуациями? (за исключением чего-то безумного, например, установки скрытого поля формы для Organisaionid и установки его в методе post)