我目前正在开发一个网站,允许用户自定义它的各个方面。
我已经能够上传,检索和缓存自定义css规则以及图像,但字符串正在逃避我。我正在使用ASP.net MVC5。
这是我到目前为止的代码:
FileController:
[HttpGet]
[OutputCache(Duration = 3600, Location = OutputCacheLocation.Server)]
public ContentResult getString()
{
string randString = getStringFromDatabase(); //retrieves hard coded string for now
if (randString != null && randString.Length > 0)
return Content(randString);
else
return null;
}
然后使用此控制器,我打算使用@ Url.Action在FileController中调用上面的方法并检索字符串。我以前能够检索图像(因为你把url动作放在img标签的src属性中)并加载自定义CSS文件(因为你把url动作放在链接标签的src属性中)这两个都可以缓存与上述类似的代码。
我用这样的图像来实现这个目标:
<img class="navbar-logo" src="@Url.Action( "image", "file", new { name = "Logo.png" })" />
并希望用字符串做到这一点。
我确实尝试过使用jQuery $ .get函数,但是它不会缓存字符串并在每次加载页面后加载字符串。
如果有帮助,我试图在数据库中保存自定义页面标题,然后在第一次加载时检索它,并缓存它。
TL; DR:我有一个存储在数据库中的字符串。我想通过剃刀动作(Url.Action或其他)检索此字符串并将其显示给网页的用户。我也想缓存它。我可以使用图片和css文件,因为<img>
和<link>
标记都有src属性,但<p>/<span>
和其他文本元素没有。
如果您需要更多信息,请告诉我们!
答案 0 :(得分:0)
所以我通过DaveParsons提供的链接找到了它(请参阅我原来的问题下的评论。)
基本上,我不需要使用@ Url.Action,答案是@ Html.Action:
<h4 id="page-title">@Html.Action("GetTitle", "file", new { type = "pagetitle" })</h4>
但是这返回了一个错误,说你不能使用子操作设置outputcache位置,因为它只支持属性'Duration,VaryByCustom和VaryByParam'。我尝试了没有位置,但尝试刷新缓存不起作用,所以我完全删除了属性,它现在缓存标题,并在更新时删除。
所以我不得不在控制器中创建一个新的代码块:
[HttpGet]
public ContentResult GetTitle(string type)
{
string titleString = getStringFromByte(this.DataProvider.CustomizationFileManager.LoadCustomizationFile("WebsitePageTitle.txt"));
if (titleString != null && titleString.Length > 0)
return Content(titleString);
else
return Content("");
}
我的回答似乎有点费解(尚未喝咖啡)。所以我会提供......
TL; DR:使用@ Html.Action。从控制器方法中删除[OutputCache]属性。