Предоставление статического контента моему действию, используя подход MVC - PullRequest
0 голосов
/ 06 апреля 2011

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

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

Пример

Controllers
   HomeController.cs

Views
   Home
      Index.aspx
      Index.txt

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

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

Ответы [ 3 ]

3 голосов
/ 06 апреля 2011

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

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

<%= File.ReadAllText(Server.MapPath("~/Views/Home/index.txt")) %>
1 голос
/ 06 апреля 2011

Я бы создал параллельную иерархию в папке 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>
  }
0 голосов
/ 06 апреля 2011

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

...