非常に単純な 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 は OrganizationID の値を提供していないと思います。
[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 メソッドで設定するなどのクレイジーなことを行うために保存します)