Сначала создайте новый каталог с именем _RemotePartialsCache
под вашей папкой ~/Views/
.
Продлить HtmlHelper
с методом RemotePartial
:
public static class HtmlExtensions
{
private const string _remotePartialsPath = "~/Views/_RemotePartialsCache/";
private static readonly IDictionary<string, string> _remotePartialsMappingCache = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
public static MvcHtmlString RemotePartial(this HtmlHelper helper, string partialUrl, object model = null)
{
string cachedPath;
// return cached copy if exists
if (_remotePartialsMappingCache.TryGetValue(partialUrl, out cachedPath))
return helper.Partial(_remotePartialsPath + cachedPath, model);
// download remote data
var webClient = new WebClient();
var partialUri = new Uri(partialUrl);
var partialData = webClient.DownloadString(partialUrl);
// save cached copy locally
var partialLocalName = Path.ChangeExtension(partialUri.LocalPath.Replace('/', '_'), "cshtml");
var partialMappedPath = helper.ViewContext.RequestContext.HttpContext.Server.MapPath(_remotePartialsPath + partialLocalName);
File.WriteAllText(partialMappedPath, partialData);
// add to cache
_remotePartialsMappingCache.Add(partialUrl, partialLocalName);
return helper.Partial(_remotePartialsPath + partialLocalName, model);
}
}
Затем использовать его следующим образом:
@Html.RemotePartial("http://localhost/PartialServer/view/calculator.cshtml")
Вы также можете заменить оригинальный Partial
метод с выше реализации (которые будут получать работу только когда пройденный путь является удаленным URL-адресом), но это не рекомендуется.
Будет ли удаленный Url действительно возвращать полный код Razor? – haim770
Нет, я настрою сервер репозитория для обслуживания этого типа файла. – mehr
Я предполагаю, что ответ «да». Запрос Url действительно вернется к полному коду Razor ... – haim770