我有一台服务器,其中包含一些部分视图文件。 我如何从其他服务器加载文件到Html.Partial? 喜欢:
@Html.Partial("http://localhost/PartialServer/view/calculator.cshtml");
我可以覆盖部分以从网址加载吗?
Asp.net MVC是框架。
答案 0 :(得分:5)
首先,在_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);
// save to cache
_remotePartialsMappingCache[partialUrl] = partialLocalName;
return helper.Partial(_remotePartialsPath + partialLocalName, model);
}
}
然后按如下方式使用:
@Html.RemotePartial("http://localhost/PartialServer/view/calculator.cshtml")
您还可以使用上述实现替换原始的Partial
方法(只有在传递的路径是远程网址时才会起作用),但不建议这样做。