2 つのアクション結果間でデータを渡す必要があるので、試してみようと思いましTempData
た (MVC は初めてなので、ご容赦ください)。これは私が試したことです:
public ActionResult Edit(Companies companies, HttpPostedFileBase file)
{
if (ModelState.IsValid)
{
try
{
if (file != null)
{
//Do stuff with file, save changes to database etc.
TempData["Companies"] = companies;
return RedirectToAction("bgcTest2", "Companies");
これで一時データが保存されます。そしてそれを取得するには:
public ActionResult bgcTest2(string BolagsID, Companies companies)
{
try
{
companies = TempData["Companies"] as Companies;
int test = companies.BolagsID;
ここに問題があります。companies.BolagsID
値がtest
ありますが、常に null です。なんで?どうすれば修正できますか?
編集:
かなり興味深いことに気付きました。ダリン・ディミトロフの提案を試すとき、そしておそらく私の試みも行うとき、ヌル値を返す行にのみブレークポイントを配置すると、次の行までブレークしません。その行がコメントアウトされていて、まったく実行されていないかのように。トワイライトゾーンへようこそ。
EDIT2:
テイク 2:
[HttpPost]
public ActionResult Edit(Companies companies, HttpPostedFileBase file)
{
if (ModelState.IsValid)
{
try
{
if (file != null)
{
// non related stuff
return RedirectToAction("bgcTest2", "Companies", new {BolagsID = companies.BolagsID});
と:
[Authorize]
public ActionResult bgcTest2(int BolagsID)
{
try
{
int test = BolagsID;
「現在のコンテキストにはテストが存在しません」というメッセージが表示されます。
EDIT3:
Take 2 で問題なく動作します。私の変数はnull
、どこでも使用したことがないため、宣言されていました。私は一度に 1 つずつ実行すると思っていましたが、明らかに、場合によっては、それらのいずれかが機能することを確認するためにいくつかの手順を実行する必要があります。
教訓: 宣言された変数を必ず使用してくださいnull
。