Предоставление статического контента моему действию, используя конвенционный подход 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. Надеюсь, это поможет.