Как вернуть представление в пост запросе, с помощью ajax?
На офф сайте microsoft написано что можно вернуть представление
return View("Views/Home/About.cshtml");
Но когда я отвечаю клиенту этим, то у меня приходит стандартная страничка. Как правильно прописывается абсолютный путь до файла?
У меня есть домашняя страница с которой идет ajax запрос к серверу:
function postSends(data){$.ajax({
type:'POST',
url: "/Method",
headers:{
"Content-Type":"application/json; charset=utf-8",
"Accept":"application/json; charset=utf-8"
},
data: JSON.stringify(method),//method - который пользователь выбирает на сайте
success: function (result) {
$("#simulators").html(result);
},
error: function(xhr, textStatus, error){
console.log(xhr.statusText);
console.log(textStatus);
console.log(error);
}});
} Дальше я думал сделать, чтобы была фабрика и в зависимости от метода отсылала определенный .cshtml файл. А как это сделать ХЗ.
Обработчик на стороне сервера:
public ActionResult Method(String method)
{IMode factMode = FactoryMode(method);
return View(factMode.GetCSSHTMLFile());}
Представления нельзя увидеть напрямую из интернета, эта папка веб-сервером не отдаётся.
Вам нужно в пост запросе указывать не путь ко вью (они не видны из интернета по пути), а указывать путь в формате /Controller/Action
Т.е. если у вас контроллер Home и ваш экшн About - указывайте url штатно как /Home/About При этом произойдёт вызов нужного вам экшена на контроллере и покажется нужное представление.
А если при этом вам "мешает" лишний вывод из штатного layout'а страницы - то вам просто не нужно его использовать: в файле Views/Home/About.cshtml укажите в первых строчках
@{
_Layout = null;
}
Но вообще в подобных случаях предпочтительнее возвращать не готовую разметку из представления - а данные в формате Json. Для ApiController например есть уже готовые методы - достаточно прописать return this.Json(model);
Updated Ответ на уточнённый вопрос.
Дальше я думал сделать, чтобы была фабрика и в зависимости от метода отсылала определенный .cshtml файл.
У this.View есть несколько перегрузок, в том числе - которые принимают viewname - имя представления. Вы можете заготовить неколько разных вью и в экшене передавать имя и параметры.
Самый простой вариант: для представления About контроллера Home сложите несколько cshtml-файлов в папку /Views/Home/About и указывайте имя представления как About1.cshtml, About2.cshtml и т.п. без указания пути.
Альтернатива - полное имя с тильдой:
return View("~/Views/Home/About/About123.cshtml");
Для более сложных способов ознакомьтесь с тем, как происходит поиск файла представления. И вообще, можно настроить папки поиска представлений, если уж совсем кастом хочется.
Виртуальный выделенный сервер (VDS) становится отличным выбором
На данный вопрос уже ответили:
Имеется datagrigview к которому через datasource привязывается list<> с данными В list<> содержатся ид для подгрузки значений из других массивов Нашел...
Нужно получить значение из первой ячейки из строки DataGrid'а
Это перевод вопроса Why does query string parameter get included twice - aspnet boolean