尝试在ASP.NET-MVC中的单个视图中组合“视图”和“编辑”的问题

时间:2009-04-02 21:59:04

标签: asp.net-mvc

我有一个图片库,其路线如下:

    // gallery id
    routes.MapRoute(
       "gallery-route",
       "gallery/{galleryID}/{imageID}/{title}",
       new { controller = "Gallery", action = "Index", galleryID = (string)null, imageID = (string) null, title = (string) null},
       new { galleryID = @"\d+" }
    );

我可以使用以下URL:

  

example.com/gallery/4/23 - 显示   画廊4和图像23

     

example.com/gallery/4 - 显示   画廊4和第一张图片   库

我试图制作一个“就地编辑”模式,让管理员可以编辑图像并遇到几个问题。目前编辑功能是非AJAX。

1)我应该如何保持“粘性”编辑模式参数。每张图片旁边都没有“编辑”按钮。我希望编辑模式为“粘性”,但后来我发现我要么在会话中设置它,要么在页面上的每个链接上添加一个参数,这是笨拙的。

2)我为此视图启用了缓存。因此,如果我进行更改并刷新 - 原始缓存视图仍然存在。

任何人都可以给我任何想法吗?

2 个答案:

答案 0 :(得分:0)

为什么不根据用户授权状态更改视图上的输出。在ascx中使用内联代码和Html帮助函数,以便在HTML中为readonly角色写出值,对于编辑器角色,在输入控件周围添加一个post表单,其中包含当前值。然后在控制器句柄上以单独的过程保存编辑。

或者只是添加编辑视图ascx以及读取视图ascx。

当post控制器程序触发时,用帖子中记录的新数据替换缓存对象。

最后,您在管理图库时遇到图像缓存问题。尝试在查询中添加随机字符串,例如:

function GetNewUrl(url)
{
Random rnd = new Random();

return url +"?"+rnd.Next(1000).ToString();

}

答案 1 :(得分:0)

进行更改时,您需要刷新页面的缓存。当用户以管理员身份登录时,不显示缓存页面或缓存页面,因为它们将具有带编辑控件等的不同视图。对于粘性模式,管理员可以选择在整个站点中处于编辑模式必须存储在会话中。我使用基于this的内容来缓存控制器操作,并使用另一种方法来确定是否缓存输出/使用缓存的输出。