Предоставление статического контента моему действию, используя конвенционный подход MVC

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

Поэтому я подумал, что мог бы создать систему, в которой я мог бы добавлять текстовые файлы в ту же папку, где действие ожидает его представление, и считывать содержимое этого файла, и содержимое этого файла может быть передано обратно в представление для отображения. Либо так, либо создайте помощника, который сделает то же самое.

пример

Controllers
   HomeController.cs

Views
   Home
      Index.aspx
      Index.txt

Index.aspx будет иметь доступ к содержимому в Index.txt.

Как бы я начал заниматься созданием этой системы. Есть ли в.NET MVC какие-то встроенные классы, которыми я мог бы воспользоваться?

3 ответа

Решение

Вчера был задан похожий вопрос: включение статического html-файла из ~/Content в представление ASP.NET MVC.

По сути, вы можете прочитать текст из файла и включить его в свой вид, используя File.ReadAllText так что вы должны иметь что-то подобное в вашем файле index.aspx

<%= File.ReadAllText(Server.MapPath("~/Views/Home/index.txt")) %>

Я бы создал параллельную иерархию в папке Content и поместил туда файлы, вероятно, в виде HTML. Затем вы можете просто загрузить их через AJAX в представлении, используя соглашение о параллельной иерархии.

Content
   Help
     Home
       index-help.html
       about-help.html
     Foo
       index-help.html
       bar-help.html

Тогда по вашему мнению

  <div class="help">
  <noscript>
      <a href='@Url.Content( "~/content/help/home/index-help.html" )'>Click for Help</a>
  </noscript>
  </div>

  <script type="text/javascript">
      $(function() {
          $('.help').load( '@Url.Content( "~/content/help/home/index-help.html" )' );
      });
  </script>

Вы также можете извлечь контроллер / действие из RouteData в представлении, если ваши маршруты согласованы, и переместить его в файл _Layout.cshtml с путем, указанным в данных маршрута.

 @{
    var controller = ViewContext.RouteData["controller"] as string;
    var action = ViewContext.RouteData["action"] as string;
    var url = Url.Content( string.Format( "~/content/help/{0}/{1}-help.html", controller, action ) );

  <div class="help">
  <noscript>
      <a href="@url>Click for Help</a>
  </noscript>
  </div>

 <script type="text/javascript">
      $(function() {
          $('.help').load( "@url" );
      });
  </script>
  }

Одним из возможных решений было бы сохранить их в виде XML-файла, который сериализован из модели, которую ожидает представление. Затем можно создать Фильтр действий, чтобы заполнить возвращаемую модель данными из файла XML. Надеюсь, это поможет.

Другие вопросы по тегам