ASP.NET MVC:将实例变量传递给View,就像在Ruby中一样

时间:2010-08-24 06:39:17

标签: ruby-on-rails asp.net-mvc dynamic viewdata

是的,我知道在ASP.NET MVC中你必须使用ViewModels。但我厌倦了编写无数的ViewModel类。此外,我想将验证模型传递给视图,而不是我必须传递整个ViewModel,所以我得到像

这样的丑陋代码
Html.TextBoxFor(m => m.TopicModel.Title)

而不是

Html.TextBoxFor(m => m.Title)

我真的很喜欢RoR的@instance_variables,您只需传递所需的所有变量,而无需为此创建新类。

我该怎么做?我认为这是不可能的,因为我尝试了一切,甚至是C#4 dynamic功能。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

您可以使用ViewData字典:

public ActionResult DoSomething()
{
    ViewData["Message"] = "Hello World";
    return View();
}

访问:

<%= ViewData["Message"] %>

您也可以切换到使用动态:

<%@ Page Inherits="ViewPage<dynamic>" %>

我认为应该允许你这样做:

public ActionResult DoSomething()
{
    return View(new { Message = "Hello" });
}

访问:

<%= Model.Message %>

因为动态在运行时而不是编译时被解析,所以它应该允许你在视图中抛出一个匿名对象。

答案 1 :(得分:0)

如果您不喜欢使用视图模型,则可以自行传递域模型。为什么不呢?

<%@ Page Inherits="ViewPage<TopicModel>" %>

Html.TextBoxFor(m => m.Title)