ときに私の記事を見る戻って私のアクションへのモデルは、どのように私は戻って、それがどこから来たデータベースにそれを保存しますか?
-
19-09-2019 - |
質問
私は一種の混乱して...
私は、IDを取るつのアクションを持つオブジェクトをロードして、そのオブジェクトのタイプのモデルにバインドされているビューに渡します。
の表示によって供給された形式でデータを編集した後、私は、バックモデルとまったく同じタイプのオブジェクトを受け取り、別のアクションに投稿します。
ただし、この時点で私はちょうどRepository.Saveを呼び出すことはできません、私は今、新しいオブジェクト、もはやビューに送信された元のデータベースクエリから一つに関連があると思います。
それでは、どのように私は、以前に照会オブジェクトを更新し、代わりにバックビューから新しいオブジェクトを取得するためのDBへの変更を保存することができますか?
私もDBからオブジェクトの新しいインスタンスを取得し、表示がそれにオブジェクトを戻さ割り当て試み、その後Repo.Save()、まだそのような運
私はここで間違って何をしているのですか?
コントローラのコード:
[Authorize]
public ActionResult EditCompany(int id)
{
//If user is not in Sys Admins table, don't let them proceed
if (!userRepository.IsUserSystemAdmin(user.UserID))
{
return View("NotAuthorized");
}
Company editThisCompany = companyRepository.getCompanyByID(id);
if (editThisCompany == null)
{
RedirectToAction("Companies", new { id = 1 });
}
if (TempData["Notify"] != null)
{
ViewData["Notify"] = TempData["Notify"];
}
return View(editThisCompany);
}
//
// POST: /System/EditCompany
[Authorize]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditCompany(Company company)
{
string errorResponse = "";
if (!isCompanyValid(company, ref errorResponse))
{
TempData["Notify"] = errorResponse;
return RedirectToAction("EditCompany", new { id = company.CompanyID });
}
else
{
Company updateCompany = companyRepository.getCompanyByID(company.CompanyID);
updateCompany = company;
companyRepository.Save();
return RedirectToAction("EditCompany", new { id = company.CompanyID });
}
return RedirectToAction("Companies", new { id = 1 });
}
解決
TryUpdateModel
メソッドを使用してみてください。あなたはそれにデータバインドする前に、この方法では、リポジトリから会社を取得することができます。
[Authorize]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditCompany(int id, FormCollection form)
{
//Default to a new company
var company = new Company();
//If we have an id, we must be editing a company so get it from the repo
if (id > 0)
company = companyRepository.getCompanyByID(id);
//Update the company with the values from post
if (TryUpdateModel(company, form.ToValueProvider()))
{
string errorResponse = "";
if (!isCompanyValid(company, ref errorResponse))
{
TempData["Notify"] = errorResponse;
return RedirectToAction("EditCompany", new { id = company.CompanyID });
}
else
{
companyRepository.Save();
return RedirectToAction("EditCompany", new { id = company.CompanyID });
}
}
return RedirectToAction("Companies", new { id = 1 });
}
HTHS、
チャールズ
Psの。一般的に、それは...あなたのドメインモデルへのデータバインド代わりに、プレゼンテーションモデルを使用して、あなたがこの全体の問題を回避することができますし、悪い考えです。
所属していません StackOverflow