2011-02-11 34 views
0

我在一个asp.net MVC 2项目,并具有从System.Web.Mvc.ViewPage <动态>继承的视图。我想这样做如下:是否可以匿名或动态视图模型传递给视图,后在ASP.net MVC 2?

public ActionResult Index() 
{ 
    dynamic model = new {Value1= string.Empty, Value2= string.Empty}; 
    return View(model); 
} 

[HttpPost] 
public ActionResult Index(dynamic model) 
{ 
    var value1 = model.Value1; 
    var value2 = model.Value2; 
    // do something here. 
} 

对于我的看法,我现在有以下:

<% using(Html.BeginForm("Index", "Test")) 
    { 
%> 
    <div> 
     <label for="Value1">Value1:</label> 
     <%=Html.TextBox("Value1", Model.Value1 as string) %> 

    </div> 
    <div> 
     <label for="Value2">Value2:</label> 
     <%=Html.Password("Value2", Model.Value2 as string) %> 
    </div> 
    <div> 
     <input type="submit" value="Submit" /> 
    </div> 
<% } %> 

上面的代码产生的“错误‘对象不包含的定义’ Value1'“并突出显示Value1的Html.TextBox行。

我试图写我自己的html表单和输入标记(确保包括名称和id属性)并将值设置为Model.Value1和Model.Value2。这用于渲染页面(和测试值);然而,在提交时,我得到了和以前一样的错误。

是否可以使用匿名和/或动态类型我在ASP.Net MVC2的ViewModels还是我被迫写一吨的DTO的,我很希望避免的。

+0

由于自动验证,使用应用程序/视图/数据模型实体类仍然更好。无论如何,匿名课程并不会带来这种乐趣。 – 2011-02-11 15:36:19

+0

我同意罗伯特,刚才的一切我已经听到和读到关于ASP.NET MVC建议强类型的意见(包括东西我周二的MVC的conf期间听到)。 – Mayo 2011-02-11 15:40:17

回答

2

是的,这是可能的,如果你申报你的观点为具有动态模型:

<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> 

也就是说,如果你使用MVC 2的默认模板(Html.EditorForModel()),你甚至不必这样做。

0

在.NET 4.0匿名类型可以容易地转化为ExpandoObjects并且因此所有的问题是固定的转化本身的开销。 检出here

相关问题