2011-05-12 43 views
0

我有這樣的結構如下:默認模型綁定器工作不正常

public class Dummy 
{ 
    public string Name { get; set; } 

    public InnerDummy Dum { get; set; } 
} 

public class InnerDummy 
{ 
    public string Name { get; set; } 
} 

以及接收Dummy

[HttpPost] 
public ActionResult Index(Dummy dum) 
{ 
    var dsad = dum; 
    //var dwss = idum; 

    return RedirectToAction("index"); 
} 

在我看來,一個ActionResult我:

@model TestMVC3Razor.Controllers.HomeController.Dummy 
@using (Html.BeginForm()) 
{ 
    @Html.TextBoxFor(o => o.Name) 
    @Html.EditorFor(o => o.Dum) 

    <br /> 
    <br /> 
    <input type="submit" /> 
} 

這是發帖

Name=xxx 
Dum.Name=yyy 

但是,當我試圖讓在ActionResultdum.Dum.Name我得到null而不是yyy。這是一個錯誤還是隻是它的方式?我沒有正確使用它?我是否需要爲此實施新的活頁夾?

回答

2

HI〜你的觀點應該使用@Html.EditorFor(o => o.Dum.Name)

@Html.EditorFor(o => o.Dum)

而且回傳控制器:

[HttpPost] 
public ActionResult Index(Dummy postback) 
{ 
    var dsad = postback; 
    var a = postback.Name;  //get Name of Dummy 
    var b = postback.Dum.Name; //get Name of InnerDummy of Dummy 

    return RedirectToAction("index"); 
} 

如果您有關於它的問題,請讓我知道:)

+0

'dum.Dum.Name'爲空,'dum.Name'具有'Dum.Name'的值。我爲屬性嘗試了不同的名稱,但是兩者都是空的。 – BrunoLM 2011-05-12 03:05:43

+0

刪除'Dum.Name'的任何一種編輯器都會使發佈的值正確綁定到'Dummy'的簡單屬性'Name' – BrunoLM 2011-05-12 03:08:13

+0

Hi〜Tyr我上面的代碼,使用了不同名稱的回發變量,我認爲「dum」將使ModelBinder混淆,所以它現在工作正常:) – Maidot 2011-05-12 03:50:01

0

您需要從Dummy類中拉出​​。

當默認模型聯編程序找到Dum屬性時,它將嘗試創建類型爲​​的對象,但在其上下文中不存在。如果您需要參考​​,則模型聯編程序需要創建一個Dummy.InnerDummy,但它無法知道這一點。

製作​​命名空間的直接成員將解決該問題。

它也有可能通過聲明Dum來解決這個問題:

public Dummy.InnerDummy Dum { get; set; } 

我不知道這一點,雖然。

+0

我感動它出來但它仍然沒有綁定 – BrunoLM 2011-05-12 02:30:18