C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

.netCore MVCでアクションメソッドを呼び出す

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■89708 / inTopicNo.1)  .netCore MVCでアクションメソッドを呼び出す
  
□投稿者/ ひろ (1回)-(2018/12/17(Mon) 09:52:03)

分類:[ASP.NET (C#)] 

.NET Core 2.1 C# MVCを使ってます。

コントローラーから別のアクションメソッドを呼び出すことが一つだけの時は成功するのですが、複数(ループで)呼び出すことができません。

    public class GomiController : Controller
    {
        // ちゃんと実行される
        public IActionResult Restore(string id)
        {
            Gomi gomi = _dbContext.Gomis.Find(id);
            return RedirectToAction("Restore", gomi.Controller, new { area = gomi.Area, id = gomi.OriginalId }); //gomi.Controllerの中身は"Hoge"
        }

        // ちっとも実行されない
        public IActionResult Restore(string[] ids)
        {
            List<string> messages = new List<string>();
            for(int i = 0; i < ids.Length; i++)
            {
                Gomi gomi = _dbContext.Gomis.Find(ids[i]);
                messages.Add(RedirectToAction("Restore", gomi.Controller, new { area = gomi.Area, id = gomi.OriginalId }).ToString());
            }
            return Json(messages);
        }
    }

    public class HogeController : Controller
    {
        private DBContext_ _dbContext;
        public IActionResult Restore(string id)
        {
            try
            {
                Hoge hoge = _dbContext.Hoges.Find(id);
                hoge.DelFlag = false;
                _dbContext.SaveChanges();
                return Json(new { success = true, message = $"HogeId:{id}({hoge.Name}) Restored." });
            }
            catch (Exception ex)
            {
                return Json(new { success = false, message = $"HogeId:{id} can not Restore.{ex.GetType()} {ex.Message}" });
            }
        }
    }

ループの中でGomiColtrollerからHogeControllerのアクションメソッドを呼び出すにはどうしたらいいでしょうか?

HttpClientを使うとログインページのHtml文字列が返ってきます。

引用返信 編集キー/
■89709 / inTopicNo.2)  Re[1]: .netCore MVCでアクションメソッドを呼び出す
□投稿者/ WebSurfer (1713回)-(2018/12/17(Mon) 10:48:15)
No89708 (ひろ さん) に返信

> messages.Add(RedirectToAction("Restore", gomi.Controller, new { area = gomi.Area, id = gomi.OriginalId }).ToString());

上記は何をしているのですか? コンパイルできてます?

そもそも何がしたいのか、全体のストーリーやシナリオを含めて書いてもらえないでしょうか。


> HttpClientを使うとログインページのHtml文字列が返ってきます。

それは何を言いたいのでしょうか?
引用返信 編集キー/
■89710 / inTopicNo.3)  Re[2]: .netCore MVCでアクションメソッドを呼び出す
□投稿者/ ひろ (2回)-(2018/12/17(Mon) 11:12:35)
> そもそも何がしたいのか、全体のストーリーやシナリオを含めて書いてもらえないでしょうか。
ゴミ箱の画面からデータを復元するときに復元するデータのテーブルによって復元処理を変更したいため、テーブルとコントローラーを紐づけて処理を委譲したいと考えています。
対象が一つの時はうまく委譲ができるのですが、複数の時には処理が実行されず、「指示を受けた」状態で止まってしまっているようです。
処理を実行して、その結果を取得するにはどのようにしたらいいでしょうか?


>>HttpClientを使うとログインページのHtml文字列が返ってきます。
>
> それは何を言いたいのでしょうか?
ほかの方法があるかな?と思い、
いろいろ試していますがなかなかうまくいく方法が見つかりません。

引用返信 編集キー/
■89711 / inTopicNo.4)  Re[3]: .netCore MVCでアクションメソッドを呼び出す
□投稿者/ WebSurfer (1714回)-(2018/12/17(Mon) 12:36:21)
No89710 (ひろ さん) に返信

> ゴミ箱の画面からデータを復元するときに復元するデータのテーブルによって復元処理を変更したいため、
> テーブルとコントローラーを紐づけて処理を委譲したいと考えています。

その説明では、質問者さん固有の実装の内部を知る人でないと理解できないのですが・・・

要するに、Hoge/Restore アクションメソッドの中にある以下のコードが実行できればやりたいことはできて、
それを Gomi/Restore(string[] ids) の引数に渡される配列の全ての要素で実行できればいいのですよね?

Hoge hoge = _dbContext.Hoges.Find(id);
hoge.DelFlag = false;
_dbContext.SaveChanges();

であれば、Gomi/Restore(string[] ids) の中のコード、

for(int i = 0; i < ids.Length; i++)
{
Gomi gomi = _dbContext.Gomis.Find(ids[i]);
messages.Add(RedirectToAction("Restore", gomi.Controller, new { area = gomi.Area, id = gomi.OriginalId }).ToString());
}

は全く意味がないし、そもそも、

> ループの中でGomiColtrollerからHogeControllerのアクションメソッドを呼び出す

ということはできないです。

なので、

for(int i = 0; i < ids.Length; i++)
{
Hoge hoge = _dbContext.Hoges.Find(ids[i]);
hoge.DelFlag = false;
_dbContext.SaveChanges();
}

のような手段を取るほかないと思います。
引用返信 編集キー/
■89712 / inTopicNo.5)  Re[4]: .netCore MVCでアクションメソッドを呼び出す
□投稿者/ ひろ (3回)-(2018/12/17(Mon) 12:54:11)
WebSurfer さん回答ありがとうございます。

>>ループの中でGomiColtrollerからHogeControllerのアクションメソッドを呼び出す
>
> ということはできないです。

『できない』ということが分かれば、JavaScript部分でループするなどの方法を気兼ねなく取ることができます。

教えていただきありがとうございました。

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ