2012-06-15 68 views
0

我有使用ASP.NET窗體的經驗,但是對於MVC是新手。ASP.NET MVC 3剃鬚刀 - 從自定義編輯器中獲取數據

如何在回發中從共享視圖獲取數據?

在ASP.NET表單我可以寫這樣的事:

ASP.NET窗體:

型號代碼:

public class MyModelItem 
{ 
    // Just TextBox is enough for editing this 
    public string SimpleProperty { get; set; } 

    // For this property separate NestedItemEditor.ascx is required 
    public MyModelNestedItem ComplexProperty { get; set; } 
} 

public class MyModelNestedItem 
{ 
    public string FirstProperty { get; set; }   
    public string SecondProperty { get; set; } 
} 

行爲:

用於編輯MyModelNeste的控件dItem是單獨的ASCX控件NestedItemEditor.ascx

這只是例如,MyModelNestedItem可以更復雜,我只是想知道我的意思。

現在當我顯示這個項目進行編輯時,我顯示了一個asp:TextBox和一個NestedItemEditor.ascx。在回發頁面上,我收集來自兩者的數據,就是這樣。

問題與MVC:

當我試圖實現這個場景與MVC,我使用的是定製EditorFor(通過使用UIHint和創建共享視圖)。因此,此共享視圖Views \ Shared \ EditorTemplates \ MyModelNestedItem.cshtml現在可以顯示已經在MyModelNestedItem屬性中的數據,但我不知道如何使其返回新輸入的數據。

當父母控制器收到一個post請求時,數據似乎在Request.Form中,但是以文明的方式達到它?當然,最好的解決方案是數據將自動獲取到MyModelItem.ComplexProperty

回答

2

被稱爲上後的動作需要是這樣的:

[HttpPost] 
    public ActionResult Index(MyViewModel mdl) 

然後將所有模型的該表格上有輸入控件(或隱藏的輸入)的屬性將具有被輸入的數據在表單上(或傳遞給它或由javascript修改,如果是隱藏的輸入)。

這假定MyViewModel是您的視圖中引用的模型。

0

寫在控制器一個ActionResult方法與複合型簡單地爲我工作:

public class Topic 
{ 
    public Topic() 
    { 

    } 
    public DetailsClass Details 
    { 
     get; 
     set; 
    } 

} 

public class DetailsClass 
{ 
    public string TopicDetails 
    { 
     get; 
     set; 
    } 
} 

的視圖:

@modelTopic 
@using (Html.BeginForm("Submit","Default")) 
{ 
    @Html.EditorFor(m=>m.Details) 
    @:<input type="submit" /> 
} 

控制器:

public ActionResult Index() 
    { 

     Topic topic = new Topic(); 
     return View(topic); 
    } 


    public ActionResult Submit(Topic t) 
    { 
     return View(t); 
    } 

當submited, Topic t包含在編輯器中輸入的值(假設您有一個客戶om編輯器爲複雜類型,在我的示例中爲DetailsClass)