2012-10-09 35 views
2

這讓我完全難倒,所以我想我會問問周圍,看看是否有解決方案!我的視圖中的模型屬性的多個值

我有一個我目前正在使用的票務系統,其中一個字段是「主要聯繫人」 - 下面的代碼;

<tr> 
    <td> 
     @Html.Label("Client Contact:") 
    </td> 
    <td> 
     @Html.TextBoxFor(model => model.PrimaryContact, new { placeholder = "Primary contact for this ticket." }) 
     <br /> 
     @Html.ValidationMessageFor(model => model.PrimaryContact) 
    </td> 
</tr> 

我有一個用戶請求一個功能;能夠說一個「+」按鈕,他們可以點擊並添加另一個字段(我將通過javascript完成此操作)。但是,我需要將由javascript創建的字段綁定到Model.PrimaryContact ..所以基本上當用戶添加另一個文本框另一個接觸它就會使「Model.PrimaryContact」價值說類似如下:

Billy Joe 918-555-5556,Bobby Jane 876-222-3334 

然後,當這個被貼到控制器我可以簡單地插入到數據庫。

我不太清楚這將如何實現,但我相信我需要某種自定義模型活頁夾,它是逗號分隔的?

任何幫助將不勝感激!

回答

1

更改 「model.PrimaryContacts」 到字符串列表List<string>和渲染:

<input type="text" id="PrimaryContacts[0]" name="PrimaryContacts[0]" value="" /> 
    <input type="text" id="PrimaryContacts[1]" name="PrimaryContacts[1]" value="" /> 
    <input type="text" id="PrimaryContacts[2]" name="PrimaryContacts[2]" value="" /> 
    <input type="text" id="PrimaryContacts[3]" name="PrimaryContacts[3]" value="" /> 

這是重要的是「名稱」屬性是相同的在每個字段(ID無所謂),他們會自動綁定到數組或集合。

更新:

如果我們假設PrimaryContact是名字,姓氏和PhoneNumber屬性的對象,那麼我們就需要呈現以下網頁上的標記:

<!-- 1st person --> 
    <input type="text" id="[0].FirstName" name="[0].FirstName" value="" /> 
    <input type="text" id="[0].LastName" name="[0].LastName" value="" /> 
    <input type="text" id="[0].PhoneNumber" name="[0].PhoneNumber" value="" /> 
    <!-- 2nd person --> 
    <input type="text" id="[1].FirstName" name="[1].FirstName" value="" /> 
    <input type="text" id="[1].LastName" name="[1].LastName" value="" /> 
    <input type="text" id="[1].PhoneNumber" name="[1].PhoneNumber" value="" /> 

以上將結合List<PrimaryContact>對象。

更新2:

最後但並非最不重要的,綁定到Dictionary<string, PrimaryContact>你這樣做:

<!-- 1st person --> 
<input type="hidden" id="[0].Key" name="[0].Key" value="1stPersonKey" /> 
<input type="text" id="[0].FirstName" name="[0].Value.FirstName" value="" /> 
<input type="text" id="[0].LastName" name="[0].Value.LastName" value="" /> 
<input type="text" id="[0].PhoneNumber" name="[0].Value.PhoneNumber" value="" /> 
<!-- 2nd person --> 
<input type="hidden" id="[1].Key" name="[1].Key" value="2ndPersonKey" /> 
<input type="text" id="[1].FirstName" name="[1].Value.FirstName" value="" /> 
<input type="text" id="[1].LastName" name="[1].Value.LastName" value="" /> 
<input type="text" id="[1].PhoneNumber" name="[1].Value.PhoneNumber" value="" /> 

希望這有助於有點

+0

我假設在那一點上,我需要迭代我的控制器內的集合,以逗號分隔每個值value1,value2,value3等,然後將該逗號分隔列表插入到Model.PrimaryContact中? – jhartzell

+1

假設您將FirstName,LastName和PhoneNumber作爲單獨的屬性,您甚至可以自動綁定到List ,但在問題中沒有提及它。無論如何,你不需要自定義ModelBinder。 – Nenad

+0

很酷..我也喜歡這種方法,但是實現一個功能的淘汰似乎更容易。但是Knockout對我來說非常吸引人,因爲這個售票系統在進一步開發時需要越來越複雜的用戶界面。 – jhartzell

1
+0

會看看這個,謝謝^ _^ – jhartzell

+0

不客氣=) –

+0

我認爲這將完全解決我的整個問題..我以前看過Knockout,但已經有一段時間了。讓我試着總結一下,以確保我理解正確。基本上,您將模型序列化爲JSON對象,執行所有數據綁定,然後將序列化的Knockout JSON對象傳遞到控制器以保存到數據庫中,而不是實際的默認ModelBinder? – jhartzell

相關問題