2015-10-15 4 views
0

Я видел пару подобных вопросов/ответов, но мне все еще кажется, что что-то не хватает. Все работает нормально, пока я не обновляю страницу или не перейду к URL-адресу напрямую.Angularjs route html5Mode прямой url .net MVC

Я могу либо получить 404, либо создать тот же url в mvc, но затем он обслуживает частичное только при обновлении и не включает страницу макета.

Там было несколько, что предложил изменить маршрут MVC к:

routes.MapRoute(
    name: "Application", 
    url: "{*url}", 
    defaults: new { controller = "Home", action = "Index" } 
); 

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

Итак, как я могу получить URL-адрес html5 (без хеш-тегов в действительных браузерах) с помощью angularjs и иметь возможность просматривать, например. Главная/О программе или Домой, затем щелкните ссылку «О программе» и укажите, что они отображаются на той же странице основного макета.

+0

Я думаю, что это то, что вы ищете http://stackoverflow.com/questions/25730797/asp-net-mvc-hosting-angular-app-with-html5mode-and-routing – Teliren

+0

Это похоже на то, что он говорит тоже самое. Перепрограммируйте все запросы. Нежелание использовать вызовы API для всего кажется более сложным, чем я мог бы предположить. Думал написать фильтр в MVC, чтобы перенаправить все неаакс-запросы, но, возможно, есть лучший способ. – VirtualLife

ответ

0

Это может быть не лучший ответ, поэтому, если у кого-нибудь есть лучшие идеи, прокомментируйте это, иначе это может помочь кому-то другому.

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

Так что в угловой я сделал что-то вроде

.when('/Home/Contact', { 
    templateUrl: '/Home/NgContact' 

В мой контроллер MVC У меня есть 2 actionresults:

public ActionResult NgContact(){ 
    ViewBag.IsFromNg = 1; 
    return Contact(); 
} 
public ActionResult Contact() { 
    return View("Contact"); //have to type in name, may look for NgContact.cshtml 
} 

Наконец на любые мнения, они могут обращаться я кладу:

@if (ViewBag.IsFromNg == 1){ Layout = null; } 

Итак, есть небольшое повторение с каждым Actionresult, имеющим 2 копии, 1 для полной загрузки страницы и 1 для любого вызова с угловыми марками, но только по 3 дополнительных линии.

Смежные вопросы