【问题标题】:ASP MVC ViewData from one view to another (Html.Encode())ASP MVC ViewData 从一个视图到另一个视图 (Html.Encode())
【发布时间】:2010-05-24 19:07:06
【问题描述】:

我有一个页面,上面有一堆标签和复选框。在此页面上,需要在项目部署后轻松自定义标签。

所以我把所有的标签都做成了这种风格:

Html.Encode(ViewData["lblText"])

我在页面上添加了一个名为“编辑按钮标签”的按钮,只有管理员才能看到。

单击该按钮时,我想加载另一个仅包含两列表格的视图。一列需要包含当前标签,另一列应该有文本框供用户输入新标签。

然后,一旦进行了任何更改,我需要永久更改原始页面上每个标签的“lblText”。

我尝试使用 return view() 和 return RedirectToAction() 将 viewdata 和 tempdata 传递给“编辑按钮标签”视图,但没有成功。我错过了一些小事还是有更好的方法来做到这一点?

【问题讨论】:

  • 听起来你需要在你的控制器中支持你所说的“更新”模式的新动作(可能还有关联的视图)。

标签: asp.net-mvc viewdata


【解决方案1】:

不要使用 ViewData 是我要说的第一件事。将模型返回到包含标签的视图。如果需要,创建一个复合模型。

然后,要编辑标签,请转到采用相同模型的视图,允许您输入新文本并将结果保存到 xml、db、文本文件等。

所以你可能有这样的模型;

public class Labels
{
  public List<string> text{ get; set; }
}

所以在你的 db 层中,无论在哪里,都用标签文本项填充对象。

在您的编辑视图中,您应该执行以下恕我直言;

<% Html.PartialView("EditLabels", Model); %>

然后你有一个名为 EditLabels 的局部视图,它会有类似以下的伪;

foreach(string item in Model)
{
  <% Html.PartialView("labelEdit", item); %>
}

最后你有一个局部视图,它接受一个项目并允许你编辑它,称为 labelEdit。

在我看来,这是在 MVC 中将整个视图分解为功能块并很好地分离关注点的正确方法。

显然您仍然需要一个 ActionResult 来发布帖子并影响更改。

【讨论】:

  • 这就是我最终要做的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
相关资源
最近更新 更多