2015-12-02 1 views
0
public string GetRazorViewAsString(string filePath, object model = null) 
{ 
     var resultString = new StringWriter(); 

     var context = new HttpContextWrapper(HttpContext.Current); 
     var routeData = new RouteData(); 

     // Creatign the controller context 
     var controllerContext = new ControllerContext(new RequestContext(context, routeData), new DummyController()); 

     // Rebdering the view and getting the html to resultString 
     var razor = new RazorView(controllerContext, filePath, null, false, null); 
     razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), resultString), resultString); 

     // Returning the generated html 
     return resultString.ToString(); 
} 

public class DummyController : Controller { } 

В настоящее время мы используем приведенный выше код для генерации HTML-кода для просмотра. В этом случае путь просмотра - это виртуальный путь.Как получить Html любого представления по его полному расположению файла

Теперь мы планируем перемещать виды за пределами проекта. Поэтому сохранить виртуальный путь невозможно сейчас.

Есть ли способ создания HTML, взяв полный путь к мнению

+0

Если вы посмотрите на пакет MVC в NuGet, вы увидите, что это зависит от пакета Razor. Если вы посмотрите на этот пакет Razor, вы увидите, что от него зависит другой проект, и этот проект способен делать то, что вы хотите. Сделайте небольшое исследование, и я думаю, вы его найдете. – mason

+0

Несомненно @mason. Но в настоящее время не хватает времени. Итак, проверяя, не сталкивался ли кто-либо с подобным делом. Так было бы быстрее. а также нет зависимостей для Microsoft.AspNet.Razor, как я вижу в NuGet. –

+0

Просто потому, что вы слишком быстро работаете, это не значит, что вы не можете провести адекватное исследование. Я думаю, вы найдете то, что ищете, если вы Google «asp.net бритва в html-библиотеку» – mason

ответ

0

можно реализовать VirtualPathProvider. Создайте класс, который наследует от VirtualPathProvider, а затем переопределить два метода:

  • FileExists
  • GetFile

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

Для получения дополнительной информации см. http://www.umbraworks.net/bl0g/rebuildall/2009/11/17/ASP_NET_MVC_and_virtual_views. Это сообщение в блоге - это поиск источников из базы данных, но вы можете адаптировать его к исходным представлениям из любого места.

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