2012-07-27 110 views
1

我試圖找出如何創建一個動態的(即在運行時更改)網頁 - 字面上不知道什麼是最好的方式去做這件事是有點損失。這種情況:創建一個動態頁面

我創建一個ASP .NET MVC3 Web應用程序,並希望創建一個頁面,用戶創建一個Tariff對象,並添加TariffBand對象Tariff.Bands - TariffBand對象的列表(以下類DEFS)。每個頻帶要求:

  • 爲下限
  • 爲上限
  • 爲單位率

用戶將在輸入每個TariffBand的細節的文本框的文本框的文本框/Tariff/Create視圖,理想情況下,我希望在頁面上有一個按鈕("Add another band"),該按鈕將爲關稅的下一個樂隊顯示另一組文本框。

我明白如何創建上面的文本框,但我不能鍛鍊如何編輯視圖文件以滿足上述要求。我應該使用部分視圖嗎?或者使用JavaScript注入一些HTML?我沒有尋找任何代碼特別是(雖然如果你想分享一些我會感激,但在實現這一目標的最佳途徑的指導。我可以用剃刀/ C#但與JavaScript/jQuery n00b 。

我的最後一個問題是:如何做在文本框中輸入等向視圖模型一個分配屬性值,而無需使用@ Html.TextboxFor()方法,如果有辦法做到這一點只是好奇

?任何幫助真的很感激,有點瘋了試圖谷歌這一個!

T阿里夫

class Tariff 
{ 
    public int id {get; set;} 
    public List<TariffBand> Bands {get; set} 
} 

關稅帶

class TariffBands 
{ 
    public int Id {get; set;} 
    public int UpperLimit {get; set;} 
    public int LowerLimit {get; set;} 
} 

非常感謝, 大衛

回答

2

您可以使用非序列索引來實現此功能。

首先,看看從博客關於他們在blog on Haacked

一般信息:

...我們提供與後綴的.index每個項目的隱藏輸入我們 需要綁定列表。每個這些隱藏輸入的名稱是 一樣的,所以如前所述,這將給模型綁定指數的 好的收集尋找時綁定到列表

<form method="post" action="/Home/Create"> 

    <input type="hidden" name="products.Index" value="cold" /> 
    <input type="text" name="products[cold].Name" value="Beer" /> 
    <input type="text" name="products[cold].Price" value="7.32" /> 

    <input type="hidden" name="products.Index" value="123" /> 
    <input type="text" name="products[123].Name" value="Chips" /> 
    <input type="text" name="products[123].Price" value="2.23" /> 

    <input type="hidden" name="products.Index" value="caliente" /> 
    <input type="text" name="products[caliente].Name" value="Salsa" /> 
    <input type="text" name="products[caliente].Price" value="1.23" /> 

    <input type="submit" /> 
</form> 

然後,一旦你瞭解了這種技術的原理,就有可能使用html助手來構建這些技巧:

我知道這些助手的兩個版本。它是由你來選擇一個:

  1. Helper by Ivan Zlatev(我喜歡這個)
  2. Helper by Steven Sanderson
+0

謝謝德米特里,你讓我在正確的道路上開始!現在,如果只有我可以讓我的JavaScript被稱爲!一步一步來... – dav83 2012-07-28 12:17:16

0

我不會提供所有的代碼,但maving模型幫助。

使用一些jQuery來創建具有陣列動態客戶端上的DOM元素(即每關稅的多個資費頻帶)(即TariffBands的ID [0] .UpperLimit等),以提供具有多個資費頻帶的能力在客戶端動態添加。當它POST時,默認綁定器將綁定到一個TariffBands數組(如果您在客戶端上擁有正確的ID)。

我這樣做有多個文件上傳(即UploadedDocuments [0]將是客戶端名稱屬性,然後我可以添加儘可能多的輸入與該名稱與當時的任何索引,然後遍歷POST以保存

0

你也可以創建一個TariffBandEditorTemplate在視圖中使用它。檢查我的答案在這SO discussion