Изменить URL-навигацию в контроллере MVC - PullRequest
0 голосов
/ 23 февраля 2019

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

Public Sub FlagBtn_Click(ByVal myFlag As String)
        Attributes.envProp._LanguageFlag = myFlag
        Attributes.mvcLogin.Index()
    End Function

Программа переходит к следующему контроллеру loginController и выполняет там функцию:

<Route("Login")>    
      Function Index() As ActionResult
            Return View()
        End Function

, которая обычно должна также изменять url в соответствии с route file

 routes.MapRoute(
        name:="Default",
        url:="{controller}/{action}/{id}",
        defaults:=New With {.controller = "main", .action = "Index", .id = UrlParameter.Optional}
    )

Но этого не происходит.Вместо этого url навигация остается на маршруте Default, который http://localhost:12345/main, и, конечно, следующая страница не может быть отображена, потому что находится в другом subfolder http://localhost:12345/Login.
Вопрос здеськак изменить навигацию url, в соответствии со страницей, которую я выбрал.
ДОПОЛНЕНИЕ 23/2/19 23: 45
Вызов для контроллера main начинается с ajax script:

<script type="text/javascript">
    function FlagBtnOnClick(flag) {
        var flagName = flag;
        $.ajax({
            type: 'GET',
            url: '@Url.Action("FlagBtn_Click")',
            dataType: 'json',
            data: { myFlag: flagName },
        });

Это происходит потому, что мне нужно присвоить значение свойству, которое очень хорошо это делает:

Public Sub FlagBtn_Click(ByVal myFlag As String) ' As ActionResult
        Attributes.envProp._LanguageFlag = myFlag
    End Sub

После этого есть одиндалее ajax script:

Login();
function Login() {
  $.ajax({
  type: 'GET',
  url: '@Url.Action("../login/Index")',
  dataType: 'json',
        });
}

С этим сценарием я вызываю следующий контроллер ... loginController
И у меня есть Sub с именем Index:

 Public Sub Index()  
        Response.Redirect("../Views/Login/Index")
    End Sub

Это моя попытка изменить url navigation bar.И, наконец, вызвать файл Index.aspx.

ДОПОЛНЕНИЕ 24/2/19 00: 06
Я заметил, что даже я набираю адрес вurl bar http://localhost:49254/Views/Login/Index
Браузер выдал мне ошибку «404 Not Found».это безумие, потому что файл есть и работает очень хорошо.

ДОПОЛНЕНИЕ 24/2/19 20: 20
Наконец, с помощью г-на Джейсена Iвнесли следующие изменения, которые привели меня к желаемому результату следующим образом: На mainController я поставил эту функцию:

Public Function FlagBtn_Click(ByVal myFlag As String) As JsonResult
        Dim routes As New RouteCollection With {.RouteExistingFiles = True}
        Attributes.envProp._LanguageFlag = myFlag
        Return Json(New With {Key .myUrl = "Login/Index"}, JsonRequestBehavior.AllowGet)
    End Function

Будьте очень осторожны с линией

Dim routes As New RouteCollection With {.RouteExistingFiles = True}

Этоэто абсолютно необходимо, потому что по какой-то "" причине "" Microsoft находится, чтобы сделать нашу жизнь более сложной (может быть из соображений безопасности) и иметь этот атрибут RouteExistingFiles в false
Таким образом, MVCне понимает ни физических путей, ни существующих файлов.
В LayoutPage у меня есть следующие сценарии:

 <script type="text/javascript">
    function FlagBtnOnClick(flag){
        var flagName = flag;
        var call = '@Url.Action("FlagBtn_Click")';
        $.ajax({
            type: 'GET',
            url: call,
            data: { myFlag: flagName },
            dataType: 'json',
            success: function (data) {
                data.myUrl;
                SendToController(data.myUrl);
            },
        });
    }
    function SendToController(url) {
        var innerUrl = '@Url.Action("Index")';
            $.ajax({
                url: innerUrl,
                type: 'GET',
                cache: false,
                success: function (data) {
                    $("body").html(data);
                    document.location = url; },
            });
        }
</script>

, с которыми я manage * button_click событие (с первым) и по возвращении из mainController я беру новый physical path и присваиваю его `url навигатору моего браузера
И, конечно, я вызываю следующий 'loginController' так:

 Public Function Index() As ActionResult
        Dim routes As New RouteCollection With {.RouteExistingFiles = True}
        Return View()
    End Function

Итак, вот оно у меня ...
Новая страница перед моим экраном.
Конечно, я сталкиваюсь с другими проблемами .. как ..
Пока я на новой странице ... и я нажимаю стрелку влево в браузере, он отправляет меня обратно на первую страницу
ЭтоОК ... нормально ... Теперь я нажимаю кнопку на моей главной странице, чтобы перейти (снова) на страницу входа ...
Ошибка ... действие никогда не происходит ... То же самое происходиткогда я нажимаю стрелку вправо в своем браузере ... Это не такая серьезная проблема ... но это проблема, которая должна решить ее
Я действительно надеюсь, что помогу любому другому потенциальному разработчику, который сталкивается с такими же проблемами.
Спасибо, господин Джейсен

...