2013-07-12 22 views
4

我有一個顯示訂單和顯示訂單詳細信息的頁面的頁面。訂單細節非常複雜,並且由於它們的佈局相同,我想使用將生成表單的部分視圖或編輯器模板。爲控件ID添加前綴並仍然綁定MVC Razor

的問題是,結果是多個重複的表單輸入ID生成的(每個訂單的詳細信息。例如,我有:

foreach (var orderDetail in Model.OrderDetils) 
{ 
    @Html.EditorFor(model => orderDetail, "WorkOrder", orderDetail) 
} 

我讀過很多關於這一點,看看解決它在哪裏建議使用editortemplate,但該解決方案只適用於具有相同形式的渲染,但傳遞不同的模型屬性,所以控制ID的前綴將不同...即like this solution

在我的情況下,由於我所傳遞的模型屬性總是相同的,所以不起作用。

那麼我該如何在部分或編輯器模板中創建唯一的Id,該模板也將綁定。

我知道,而不是:

@Html.EditorFor(model => model.WOHdr.Attribute1) 

我可以這樣做:

@Html.TextBoxFor(model => model.WOHdr.Attribute1, new { id = Model.Id + "_Attribute1" }) 

但是當它傳遞給控制器​​也不會綁定。

想法?

+1

正在使用的值是使用字段名稱而不是id的。 – YD1m

+0

@ YD1m謝謝,這是很好的瞭解...所以,如果你操縱Id ...,綁定不會受到影響,只要你單獨保留Name即可。 –

回答

1

試試這個

@Html.TextBoxFor(model => model.WOHdr.Attribute1, new { @id = @Model.Id + "_Attribute1" }) 

用 「@」 +動態值。現在,您將獲得唯一的ID的

在EditorFor你可以使用這樣

@Html.EditorFor(model => model.WOHdr.Attribute1, null, "id=" + @Model.Id + "") 

的ID會產生這樣的

id="id_1", id="id_2" and so on.. 
+0

謝謝,這部分工作...從我讀過的任何地方,當使用EditorFor時你無法重寫Id,我嘗試了你爲EditorFor提出的建議,但它不起作用。通過使用TextBoxFor覆蓋Id確實有效....但我的問題是我有一些字段的編輯器模板...如果我在模型中指定了EditorTemplate,即使我使用了TextBoxFor並重寫了Id, editorTemplate仍然使用(好),但它忽略了textBoxFor中指定的Id。 –

0

<input id="[email protected](test.TestId)" type="checkbox" />

我希望上面的代碼將幫助您

相關問題