Как мне вызвать метод в том же контроллере и остановить выполнение вызывающей функции при возврате View?

У меня есть это,

public ActionResult IndexByName(string lastName)
{
    //find the name
    return View("Index", myObject);
}

public ActionResult SomeOtherAction(IFormCollection collection)
{
    if (collection["somekey"] == "search")
    {
        this.IndexByName(collection["lastname"]);
    }
    //other stuff in this method that I don't want to run if it says search
}

Как я могу предотвратить продолжение остальной части метода SomeOtherAction? Я хотел, чтобы приложение вернулось к просмотру («Индекс») другим методом.

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

Marc LaFleur 28.03.2018 21:08

SomeOtherAction вызывает Index, и я хотел, чтобы система возвращала View Index (в IndexByName) и прекращала выполнение в SomeOtherAction.

johnny 28.03.2018 21:11

А return IndexByName("something"); этого не делает?

Marc LaFleur 28.03.2018 21:27

Я не пробовал. Я думал, что это сделает другой метод, потому что у него есть возврат View, а не "обычный" возврат.

johnny 28.03.2018 22:00

Нет никакого «обычного» возврата, есть только то, что вы объявили в своем методе как возвращаемый тип, то есть ActionResult. View() просто создает и возвращает ViewResult, который, конечно, наследуется от ActionResult.

Federico Dipuma 28.03.2018 22:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
154
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В C# ключевое слово return будет существовать в текущем методе и возвращать управление вызывающему методу. Из документация:

The return statement terminates execution of the method in which it appears and returns control to the calling method. It can also return an optional value. If the method is a void type, the return statement can be omitted.

Так, например, вы можете использовать это:

public ActionResult IndexByName(string lastName)
{
    return View("Index", myObject);
}

public ActionResult SomeOtherAction(IFormCollection collection)
{
    if (collection["somekey"] == "search")
    {
        // This will return the result of IndexByName()
        // and exist the SomeOtherAction method
        return IndexByName(collection["lastname"]); 
    }
    else
    {
        // This will return the View SomeOtherView
        // and exist the SomeOtherAction method
        return View("SomeOtherView");
    }

    // In theorty this would  return an HTTP 200
    // but it is NEVER hit. All execution paths 
    // within this method resolved before we 
    // ever got here.
    return Ok();
}

Спасибо. Я подумал, что это будет похоже на перенаправление, и я просто отправлю меня в просмотр. Нет.

johnny 30.03.2018 16:31

Другие вопросы по теме