从数据库中检索,显示和缓存字符串?

时间:2014-05-23 08:25:48

标签: c# jquery asp.net-mvc razor

我目前正在开发一个网站,允许用户自定义它的各个方面。

我已经能够上传,检索和缓存自定义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>和其他文本元素没有。

如果您需要更多信息,请告诉我们!

1 个答案:

答案 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]属性。