2011-02-11 36 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

相關問題