Передача объекта от контроллера к другому - PullRequest
0 голосов
/ 06 мая 2020

У меня есть объект под названием scope, который позволяет мне подключаться к серверу. Я хочу сохранить этот объект на протяжении всей процедуры, поэтому мне нужно передать его другому контроллеру. Это подключение к контроллеру сервера:

public IActionResult Proceed(Server serverModel)
        {
            if (!ModelState.IsValid) return View("Connect");
            else
            {
                try
                {
                    // --------- This is what I need to save  ------------ \\
                    ManagementScope scope = Connecting.ConnectToServer(serverModel);
                    // --------- This is what I need to save  ------------ \\
                    return RedirectToAction("Menu", "Schema");
                }
                catch (Exception e)
                {
                    ViewBag.Message = e.Message.ToString();
                    return View("Failed");
                }
            }
        }

, а в другом контроллере мне нужно передать его в качестве параметра:

public IActionResult ExportProceed(SchemaExport ex)
        {
            if (!ModelState.IsValid) return View("Export");
            else
            {
                try
                {
                    ExportProcess.CreateDirectories(ex, scope);
                    return RedirectToAction("Menu", "Schema");
                }
                catch (Exception e)
                {
                    ViewBag.Message = e.Message.ToString();
                    return View("Failed");
                }
            }
        }

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Обычно я не защищаю создание синглтонов, но, как упоминалось здесь , они иногда могут быть полезны. Поскольку вы не используете DI, это может быть хорошим вариантом использования.

Например, что если вы сделаете свой класс ConnectToServer stati c?

public static class Connecting
{
    private static ManagementScope scope;

    public static void SetScope(Server sv)
    {
        //  WMI scope
        ConnectionOptions options = new ConnectionOptions
        {
            Username = sv.User,
            Password = sv.Pass
        };
        scope = new ManagementScope(@"\\" + sv.Name + @"\root\cimv2", options);
        scope.Connect();
    }

    public static ManagementScope GetScope { get { return scope; } }
}

Тогда в вашем Proceed действие:

// ---------- This is the function returning the scope ---------- \\
Connecting.SetScope(serverModel);
// ---------- This is the function returning the scope ---------- \\

И в вашем ExportProceed действии:

// ---------- This is where i need to pass the scope ---------- \\
var scope = Connecting.GetScope;
ExportProcess.CreateDirectories(ex, scope);
// ---------- This is where i need to pass the scope ---------- \\
0 голосов
/ 06 мая 2020

Вы можете использовать TempData["YourName"] = JsonConvert.SerializeObject(Connecting.ConnectToServer(serverModel));, тогда вы возвращаете RedirectToAction("Menu", "Schema");.

После этого вы просто в меню контроллера берете эти данные из TempData.

var scope = JsonConvert.DeserializeObject<ManagementScope>((string)TempData["YourName"]);

Помните, что TempData живет только два запрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...