2015-12-17 3 views
2

В моем проекте ASP.NET MVC у меня есть контроллер, из которого одно действие просто возвращает результат. Это действие не получает никаких аргументов и просто возвращает страницу CSHTML. Эта страница не может быть частичной.Создать представление без действия контроллера

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

// Edit - выборочные коды

Сейчас в моем UserPanelController у меня есть ChangeSettings действия

[HttpGet] 
public ActionResult ChangeSettings() 
{ 
    return View("Configuration"); 
} 

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

<nav> 
    <div class="nav-wrapper"> 
     <a href="#" class="brand-logo">Logo</a> 
     <ul id="nav-mobile" class="right hide-on-med-and-down"> 
      <li><a href="sass.html">Sass</a></li> 
      <li><a href="badges.html">Components</a></li> 
      <li><a href="@Url.Action("ChangeSettings","UserPanel")">Konrad</a></li> 
     </ul> 
    </div> 
</nav> 

Могу ли я получить ConfigurationView без действия моего контроллера?

+0

Что вы подразумеваете под * «сгенерируйте представление без действия контроллера» *? – Albireo

+0

Можете ли вы дать свой пример кода, и, пожалуйста, также уточните свой вопрос? Первое предложение, заканчивающееся тем, что «одно действие просто возвращает результат», не является английским, и невозможно догадаться, что это значит. –

+0

Дополнительная информация в главном сообщении - извините за отсутствие образцов – mersey

ответ

0

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

Для того, чтобы убедиться, что маршрутизация MVC не INTERFER вы можете добавить что-то вроде этого, чтобы ваши маршруты:

routes.IgnoreRoute("{file}.html"); 
+0

, но в статическом файле html я не могу получить информацию, например, о текущем имени пользователя – mersey

+1

Нет, точно. Описанный мной подход может использоваться только для статического контента. В противном случае вы должны создать действие в контроллере. – user449689

1

Вы можете вынести мнение самостоятельно, вызвав следующий метод

private static string RenderPartialViewToString(Controller controller, string viewName, object model) 
    { 

     controller.ViewData.Model = model; 

     using (var sw = new StringWriter()) 
     { 
      var viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName); 

      var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw); 
      viewResult.View.Render(viewContext, sw); 

      return sw.ToString(); 
     } 
    } 

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

Надеюсь, это поможет.

+1

Что делать, если этот шаблон электронной почты не имеет контроллера? –

0

Может быть, я немного слишком поздно, но то, что вы, вероятно, ищете это:

@{ Html.RenderPartial("_PartialViewName"); } 

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

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