ASP.MVC: доступ к данным в контроллере с другого контроллера - PullRequest
0 голосов
/ 01 марта 2019

"Пожалуйста, не стесняйтесь редактировать заголовок, если он вводит в заблуждение, так как я не уверен, правильно ли это спрашивать"

Я новичок в ASP.MVC Ястолкнуться с, казалось бы, легкой проблемой и с трудом справиться с этим.

Что я пытаюсь сделать: У меня есть два набора строительных лесов: View A, Controller A, Model B. иВид B, Контроллер B, Модель B.

Контроллер A выглядит следующим образом:

 public ActionResult LogIn(FormCollection formValues)
        {
            ModelA Model = new ModelA();
            Model.EmailAddress = formValues["EmailAddress"];
        }

Я хочу передать это formValues["EmailAddress"] от контроллера A к контроллеру B.

В контроллере B:

    public ActionResult Initiate(FormCollection formValues, string phone, string method)
    {
        var ModelB = new ModelB();
        var ModelA = new ModelA(); ---> This is null.
        ModelB.Email = ModelA.EmailAddress --> This is null.
        var userId = ModelB.dosomething(ModelB.Email, phone, method);
    }

Есть ли в этом необходимость?

Ответы [ 3 ]

0 голосов
/ 01 марта 2019

Если логика ModelA и ModelB будет взаимосвязана, я бы порекомендовал создать новую ViewModel, View и Controller:

ModelAB

public class AB {
    public ModelA ModelA { get; set; }
    public ModelB ModelB { get; set; }
}

Модель ABController

public ActionResult LogInAndInitiate(FormCollection formValues, string phone, string method)
{
    var ModelB = new ModelB();
    var ModelA = new ModelA(); // passed in, so its not null!
    ModelA.EmailAddress = formValues["EmailAddress"];

    ModelB.Email = ModelA.EmailAddress // passed in too!
    var userId = ModelB.dosomething(ModelB.Email, phone, method);
}
0 голосов
/ 02 марта 2019

Если действия контроллера полностью не связаны (т. Е. Они не вызывают друг друга), у вас есть два варианта:

1) Отобразить данные клиенту в форму и разрешить повторную публикацию данныхпо следующему запросу.Это, конечно, подходит только для небольших объемов данных, И если вы уверены, что это не является ни чувствительным, ни проблемой, если пользователь подделывает данные.

2) Используйте сеансы.Для этого предназначены сеансы, т. Е. Содержимое корзины покупок и т. Д. Вы можете сохранить эти данные в базе данных или поместить их в память только в объекте сеанса.

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

0 голосов
/ 01 марта 2019

Сохраните модель в TempData на контроллере A, как этоне следует использовать в последующих запросах, чтобы сохранить постоянство TempData для последующего запроса, который вы можете использовать

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