【问题标题】:Collecting data from a view while it's loaded on the page在页面上加载视图时从视图中收集数据
【发布时间】:2013-06-03 12:13:30
【问题描述】:

这是关于 asp.net mvc3 应用程序剃刀视图。我正在实现一个自定义图像库,用户可以在其中删除已经存在的图像。由于其他要求,当用户单击删除时,我不应该删除图像,而是 - 我只是删除图像所在的跨度,但我必须以某种方式保存图像的 Id,然后将其传递给执行该操作的服务删除、保存等所有工作。

我遇到的问题是我找不到在视图的整个生命周期中保存多个值的方法。我试过这个 - 在我的控制器开始时初始化 List<long> idToBeDeleted = new List<long>(); 然后在我的实际方法中使用它:

public void DeletePicture(long documentImageID)
        {
            if (documentImageID != null)
            {
                idToBeDeleted .Add(documentImageID);
            }
        }

我也尝试在其他地方声明它,但似乎控制器中的所有内容都在视图的每次调用时重新初始化 - 我可能不对,实际上对我来说似乎不对,但现在我明白了事情就是这样。所以我的问题是,如何收集这些 id 并在提交整个表单时将它们传递给控制器​​(这整个事情在表单内部)可以用 C# 完成还是我必须搜索一些客户端解决方案,它可以是吗?

【问题讨论】:

  • Razor 发生在服务器端。
  • 另外,控制器是根据请求创建的,所以它是无状态的。

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


【解决方案1】:

你是对的,MVC 是无状态的。你可以从 AJAX 的角度来解决这个问题:

  • 创建一个将与图像相关的“ToBeDeleted”字段设置为 true 的操作。正如您所提到的,您可以稍后让服务删除所有这些图像。

  • 在删除按钮上使用 AJAX 调用将图像的 ID 提供给此控制器。

  • 成功后,隐藏图像/div。

  • 仅显示在页面刷新时未等待删除的图像。

【讨论】:

  • 谢谢。我几乎要开始实施您的想法,但是您如何看待将其保留在会话变量中?这不是更好吗?而且更容易:)
  • 假设您正在使用数据库,并且删除图像的服务也在该服务器上运行 - 它需要知道在某些时候需要删除哪些图像,它也可以马上。使用会话可能会更棘手。使用 AJAX 方法的另一个好处是它会有一个更“响应”的 UI。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 2019-04-10
  • 2011-06-03
  • 1970-01-01
相关资源
最近更新 更多