Передать имя представления в PartialViewResult с помощью Jquery в MVC - PullRequest
0 голосов
/ 02 января 2019

Мне нужно передать имена представлений в PartialViewResult из Jquery, один контроллер и один PartialViewResult метод для использования всего приложения,

рабочий код контроллера: -

    public PartialViewResult addNew(string MenuId)
    {
        return PartialView(@"~/Views/Test/Add.cshtml");
    }

html метод jquery: -

  $('#btn_add').click(function (e) {
      window.location.href = '@Url.Action("addNew", "Home")?MenuId=' + 1;
  });

этот код работает нормально, но почему мы должны добавлять код в имя представления в контроллере, а не передавать имя представления из метода jquery, этобудет очень простым в обслуживании и очень простым методом для кода

Ожидаемый вывод: код контроллера: -

    public PartialViewResult addNew(string MenuId, string ViewNames)
    {
        return PartialView("@~/"+ ViewNames);

        //return PartialView(@"~/Views/Test/Add.cshtml");
    }

Ожидаемый вывод: html jquery метод:-

  $('#btn_add').click(function (e) {
      window.location.href = '@Url.Action("addNew", "Home")?MenuId=' + 1 + '&viewname=' + 'Views/Test/Add.cshtml';

  });

приведенный выше код, показывающий ошибку при обработке вашего запроса.Кто-нибудь может поделиться вашими идеями? ..

Мне нужно передать имя представления из метода jquery с одним методом PartialViewResult в контроллере MVC

1 Ответ

0 голосов
/ 02 января 2019

Фактическая проблема здесь заключается в том, что вы передаете косые черты как значение строки запроса без использования процентного кодирования , как показано в коде перенаправления ниже:

window.location.href = '@Url.Action("addNew", "Home")?MenuId=' + 1 + '&viewname=' + 'Views/Test/Add.cshtml';

Сгенерированный URL-адрес из приведенного выше примера будет выглядеть следующим образом: это недопустимый URL-адрес, поскольку косая черта является зарезервированным символом в строке URL-адреса, поэтому при обработке вашего запроса появилось сообщение « Произошла ошибка »:

/Home/addNew?MenuId=1&viewName=Views/Test/Add.cshtml => invalid trailing slashes

Чтобы решить эту проблему, необходимо поставить вспомогательный параметр @Url.Encode(), чтобы косые черты кодировались как %2f вместо:

window.location.href = '@Url.Action("addNew", "Home")?MenuId=' + 1 + '&ViewNames=' + '@Url.Encode("Views/Test/Add.cshtml")';

, которая генерирует строку запроса в кодировке URL:

/Home/addNew?MenuId=1&ViewNames=Views%2fTest%2fAdd.cshtml => valid

Если вы передаете URL из свойств переменной / viewmodel на стороне сервера, убедитесь, что все специальные символы, переданные в виде строки запроса, кодируются первыми:

window.location.href = '@Url.Action("addNew", "Home")?MenuId=' + @MenuId + '&ViewNames=' + '@Url.Encode(ViewName)';

Тем не менее, я думаю, что лучше включить путь к файлу в метод действия и передавать просто имя представления без расширения, если вы хотите загрузить частичное представление из той же папки, следовательно, избегая использования Url.Encode():

public ViewResult addNew(string MenuId, string ViewNames)
{
    return View(@"~/Views/Test/" + ViewNames + ".cshtml");
}

Примечания:

1) window.location.href перезагрузит всю страницу, для этого необходимо использовать ViewResult. Если вы хотите обновить частичное представление без перезагрузки всей страницы, используйте вместо этого обратный вызов AJAX.

$('#btn_add').click(function (e) {
    $.ajax({
        url: '@Url.Action("addNew", "Home")',
        type: 'GET',
        data: { MenuId: 1, ViewNames: '@Url.Encode("Views/Test/Add.cshtml")' },
        success: function (result) {
            $('#targetElement').html(result);
        },
        error: function (xhr, status, err) {
            // error handling
        }
    });
});

2) Параметры метода действия могут распознавать символы кодирования процентов и возвращать их в исходную строку.

Похожие проблемы:

Символы разрешены в URL

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