【发布时间】:2010-09-29 01:05:04
【问题描述】:
我有一个视图类 (OrderView.aspx),它通过中继器控件显示订单的详细信息(帐户名称、订单日期)以及订单行列表。每个订单行由一个用户控制视图 (OrderLineView.ascx) 表示,该视图显示订单行的详细信息(项目名称、数量、价格)。我有一个名为 Order 的模型对象,我将其用作所有这些的数据源,并将其作为视图的模型对象传递。
每个 OrderLineView 用户控件都有一个保存和删除按钮。我有 Save 按钮将 OrderLine 控件中的表单内容发布到 Controller 上的 Save 方法,然后 RedirectToAction 回到同一个 Order 页面(这会刷新整个页面,没有关于它的 AJAXy)。我有删除按钮链接到控制器上尝试删除的方法,然后 RedirectToAction 回到同一个订单页面。但是,如果删除失败,我希望当页面再次呈现时,删除按钮旁边会显示一个小错误消息(请记住,页面上的每个订单行都有一个删除按钮,所以我只希望消息旁边我点击的那个)。我的问题:
1 - 我如何将这些数据从我的控制器方法传递到特定的用户控件?我应该以某种方式将其添加到模型中吗?似乎是个坏主意(因为它确实不是模型的一部分)。
2 - 我应该有一个 OrderLineController 用于 OrderLine 操作以及一个 OrderController 用于 Order 操作吗?我只是想知道最佳做法是否为每个视图都有一个单独的控制器。
3 - 我看到有些人可能会使用这样的匿名类型值调用 RedirectToAction:
RedirectToAction("ViewOrder", new { Id = 1234, Message = "blabla"});
但这会使消息值显示在 URL 字符串中。我同意,但如果可能的话,我希望它不显示。
4 - 另外,为了从视图中访问模型的属性,我发现自己一直在这样做:
foo(((someModelType) this.ViewData.Model).SomeProperty);
我不喜欢这个有很多原因,其中之一是我不希望我的视图与我的模型类型相结合(这就是我使用 ViewPage 而不是 ViewPage 的原因) .我更希望能够有这样的电话:
foo(ModelEval("SomeProperty"));
有这样的事吗?我自己写了,但如果我不需要的话,我会喜欢的。
【问题讨论】: