2012-11-10 25 views
2

我真的很奇怪的問題。所以,我的結構是這樣的Viewmodel部分和副本

<div id="tasks"> 
    @Html.Partial("_Tasks", tasks) 
</div> 

和_Tasks我做一個foreach通過所有任務,併爲每一個任務我有額外的部分

... 
@Html.Partial("_Time", new TimeViewModel(task)) 
... 

和_時間內我有形式

... 
@Html.TextBoxFor(m => m.Name) 
.... 

因此,在一個視圖中,我呈現一個局部,然後再次內部多個局部,並在其內部形成一個窗體。當我執行頁面加載時,它可以工作。問題始於當我使用ajax時,所以我對Time執行編輯併發布到服務器並使用返回的html更新#tasks。

我我的控制器操作我有...

... 
return View("_Tasks", tasks); 

現在的問題是,(M => m.Name)由@ Html.TextBoxFor產生的所有輸入的值相同。爲什麼?如果我做

@Html.DisplayFor(m => m.Name) 

我工作得很好。我也試過

@Html.TextBoxFor(m => m.Name, new { Value = Model.Name }) 

它的工作原理,但它看起來對我來說很討厭。

問題是,爲什麼會得到這種行爲?爲什麼所有的TextBoxFor都有相同的值?

回答

1

ASP.NET MVC中的默認模型聯編程序確定如何通過使用輸入標籤上的名稱屬性將值映射到您的模型。所有的html助手都會根據這個標記生成標記。當你在一個局部視圖使用該助手,並嘗試結合的典範這是最主要的財產

<input type="text" name="Name" /> 

但是:

所以,當你寫

@Html.TextBoxFor(m => m.Name) 

它會產生這樣的事模型,它不會工作。部分中的Html幫助器仍然會產生標記,認爲它的模型是主要模型。所以你的輸入將綁定到主模型的Name屬性。你可以看一下this question來解決這個問題。處理帖子請求時請記住default binder can not pick up complex collections

+0

聽起來很有趣,但沒有一個建議的解決方案是偉大的.. – FrEaKmAn