ときに私の記事を見る戻って私のアクションへのモデルは、どのように私は戻って、それがどこから来たデータベースにそれを保存しますか?

StackOverflow https://stackoverflow.com/questions/2231892

  •  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の。一般的に、それは...あなたのドメインモデルへのデータバインド代わりに、プレゼンテーションモデルを使用して、あなたがこの全体の問題を回避することができますし、悪い考えです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top