2011-03-31 25 views
0

我有一個視圖模型爲這樣:如何從視圖張貼形式強類型爲ViewModel?

public class MyViewModel 
{ 
    public MyObject myObject{ get; set; } 
    public List<MyList> myList{ get; set; } 
} 

我有一個強類型來MyViewModel

形式此視圖允許您爲MyObject來的屬性中輸入值的視圖,以及創建一個MyList對象列表。列表部分工作正常,但我認爲這將是兩個更困難。

假設爲MyObject有一個屬性Description我創建一個文本框輸入值作爲這樣的:

@Html.EditorFor(x => x.myObject.Description); 

文本框呈現與MyObject_Description的ID ......問題是,當我張貼此我控制器動作,MyObject根本就沒有被綁定(儘管列表項在他們收到「MyViewModel_MyList [guid] .myListValue」的適當ID時會做)

我在做什麼錯誤?

編輯:更多信息

視圖的第一行是: @model MyApp.ViewModels.MyViewModel

和動作方法:

[HttpPost] 
    public ActionResult Create(MyViewModel myViewModel) 
    { 

    } 

我傳遞一個新的MyViewModel到局部視圖開始...

public ActionResult Create() 
    { 
     MyViewModel model = new MyViewModel(); 
     return PartialView(model); 
    } 

EDIT 2

確定,當我使我的包含我稱之爲形式的局部視圖:

@{Html.RenderAction("Create", "MyController");} 

這是從類型的視圖中調用@model IEnumerable<MyApp.Models.MyObject> (此視圖顯示當前列表現有的MyOjects,並在底部呈現部分以允許用戶向DB添加另一個MyObject)

+0

你能告訴你的視圖的第一行?你的Action方法的第一/定義行? – Kon 2011-03-31 23:34:15

+0

當然...編輯上面 – stephen776 2011-03-31 23:38:58

+0

你的控制器方法是什麼樣的?你也是在一個頁面中渲染所有的元素? – sarvesh 2011-03-31 23:44:30

回答

2

如果您還沒有這樣做,請嘗試創建名爲MyObject.cshtml的編輯器模板(例如,Views-> Shared-> EditorTemplates)。將您的部分視圖內容移至此視圖,然後撥打

@Html.Editor("myObject"). 

從您的父母分部視圖。

+0

由於這實際上是一個相當複雜的視圖,是否有一個原因,你相信這將解決問題?,你知道之前,我花了一大堆時間在這大聲笑 – stephen776 2011-04-01 00:28:38

+0

好吧,我繼續前進,試試這個真正快速...如果我刪除了發佈MyList對象的所有事情,'MyObject'工作正常......只要我將該列表添加到混合中,該列表就可以工作,但是'MyObject'值不會通過......這是一個真令人沮喪的問題! – stephen776 2011-04-01 00:38:36

+0

仍然沒有解決,但我會給你一個upvote爲你的努力,幫助我與這 – stephen776 2011-04-01 00:41:09

0

將您的ViewModel直接更改爲具有描述

public class MyViewModel 
{ 
    public string Description { get; set; } 
    public List<MyList> myList{ get; set; } 
} 

然後綁定相應

@Html.EditorFor(x => x.Description); 
+0

那麼我需要用'MyObject'來綁定其他屬性描述就是我的例子 – stephen776 2011-03-31 23:45:22

0

我希望您的視圖的頂線看起來是這樣的:

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

這告訴認爲它提供的模型是鍵入MyViewModel(一種la <T>風格)。

+0

對不起,忘了提,這個視圖是局部視圖 – stephen776 2011-03-31 23:45:41

+0

哦,確保你正確地將模型對象傳遞給局部視圖。該代碼行怎麼看? – Kon 2011-03-31 23:48:03

+1

只有當他使用Aspx/Ascx頁面時,這纔是真實的,他顯然不是。他使用剃刀。 – Linkgoron 2011-03-31 23:57:53

0

我不認爲開箱即用的模型綁定知道如何綁定到複雜的對象。你可能不得不寫一些自定義模型綁定器。

恐怕這不是我自從MVC1以來所做的事情,所以我有點猶豫是否會給你任何示例代碼,因爲從那以後機制可能完全改變了。快速谷歌確實把這篇文章http://www.learnxpress.com/asp-net-mvc-hosting-6-tips-for-asp-net-mvc-model-binding-2.html和這篇文章http://bradwilson.typepad.com/blog/2010/10/service-location-pt9-model-binders.html

編輯:我剛看到這個答案可能有助於Retrieving data from view, should I use model binder?