1

这是一个典型的场景,每个应用模型都继承一个基类。这个基类包含一些属性,这些属性在以查询字符串形式出现的不同参数上表现不同。

我希望有一个集中的机制来处理这种情况,比如当控制器返回一个视图时,我捕获模型并提供属性中的值。

是否可以?

4

2 回答 2

1

哇,很开放的问题。如果您只想计算/获取一些额外信息以显示在特定视图中,您可以在控制器中使用ViewBag对象。

ViewBag.Greeting = "Welcome, " + User.FirstName;

然后,在您的 Razor 代码中,您可以通过@ViewBag.Greeting(或<%=ViewBag.Greeting%>在 ASPX 中)访问它。ViewBag 继承自 ASP.NET 的ViewData对象,该对象(有效地)是动态类型的,并且将接受您扔给它的任何对象结构。简而言之,非常强大,易于使用,但可能会导致运行时出现问题,而其他方法会在编译时遇到问题

当然,您可能会遇到问题,即您的类(或数据源)中的数据的格式不适合您的 View 使用。这在开发与现有生态系统交互的应用程序时非常常见(即您将编写的大部分代码)。在这种情况下,视图模型是你的朋友:http ://en.wikipedia.org/wiki/View_model

In addition to the /Models folder in your project, create a /ViewModels namespace and match these to your views. So, for your /Views/Product/Details.cshtml you create a /ViewModels/Product/Details.cs class and either pass in the id (or the model) as an argument. Make using you add a using MyProject.ViewModels in your controller though!

于 2013-01-03T10:17:01.157 回答
0

您可以制作自己的 CustomActionResult 类。像这样的东西:

public class CustomActionResult : ActionResult
{
     public override void ExecuteResult(ControllerContext context) 
     {
          // your logic here
     }
}

public ActionResult YourAction() 
{
     return new CustomActionResult (viewModel);
}
于 2013-01-03T10:07:14.907 回答