2012-04-03 59 views
3

我目前正試圖弄清楚如何將MVC 3視圖中的多個字段綁定到視圖模型上的1 屬性以及嘗試實現時的建議這個。將多個字段綁定到MVC 3視圖模型的相同屬性

使用一個示例來了解準備某些內容所需的分鐘數(僅)。

的形式可能是這個樣子:

準備時間 - 時間:[1]分鐘:[30]

和提交的表單值需要被轉換成分鐘,並綁定到PreparationTimeInMinutes財產的ViewModel。

視圖模型屬性:

public short PreparationTimeInMinutes { get; set; } 

和View是強類型的視圖模型,目前有以下:

<div class="editor-label"> 
    @Html.LabelFor(model => model.PreparationTimeInMinutes) 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.PreparationTimeInMinutes) 
    @Html.ValidationMessageFor(model => model.PreparationTimeInMinutes) 
</div> 

這裏是我開始爲了實現思考的幾件事這個。

  1. 更改PreparationTimeInMinutes屬性設置爲具有一個小時&分鐘 財產和創建編輯和顯示模板,它的ViewModel,這樣 MVC3可以理清綁定和驗證?
  2. 使用JavaScript和一個隱藏字段的準備時間。
  3. 一些其他的方法,讓你使用MVC模型綁定來做這種事情?

有沒有人對這類事情有最佳做法有任何建議?或者如果我走了。

請讓我知道。謝謝

回答

1

您應該使用第一個選項。
這正是編輯器模板的作用。

如果需要,可以創建一個自定義ModelBinder,以將兩個POST值綁定到單個數字(以及類似的編輯器模板),並將屬性應用於該屬性以選擇該ModelBinder。
但是,這可能會矯枉過正。

+0

如何可以結合兩個值,而setProperty方法被調用僅一次尊重提交的數據的順序,我在此[問題]一些問題[http://stackoverflow.com/questions/19914955/ map-multiple-fields-to-a-property-while-binding-the-property] – Hilmi 2013-11-11 20:42:44

0

謝謝SLaks。

使用我沒了下文,我認爲模型的第一個選項

public TimeInMinutesViewModel PreparationTimeInMinutes { get; set; } 

提出這一視圖模型

public class TimeInMinutesViewModel { 
    public string Label { get; set; } 
    public short Hours { get; set; } 
    public short Minutes { get; set; } 
} 

和這個編輯器模板

@model TimeInMinutesViewModel 

<div>@Html.LabelFor(x => x.Label)</div> 
<div class="editor-label">@Html.LabelFor(x => x.Hours)</div> 
<div class="editor-field">@Html.EditorFor(x => x.Hours)</div> 
<div class="editor-label">@Html.LabelFor(x => x.Minutes)</div> 
<div class="editor-field">@Html.EditorFor(x => x.Minutes)</div> 

,並在視圖

@Html.EditorFor(model => model.PreparationTimeInMinutes) 
@Html.ValidationMessageFor(model => model.PreparationTimeInMinutes) 

我還沒有測試這一點,我可能需要做標籤的一些變化,但這看起來似乎是爲我想用這種方式爲兩種不同性質的工作。

我現在已經得到的問題是能夠將它們映射到這是一個短整型我的實體屬性。

我使用AutoMapper,所以我希望這將與自定義類型轉換工作,在1個方向至少,但我不知道兩個方向:(

2

的JavaScript是不壞,但不是真的MVCish。我認爲更好的方法是使用這兩個字段的視圖模型或使用編輯器/顯示模板創建一個新類。

我同意SLaks;您可以創建自定義模型聯編程序來處理這個問題,但它我創建了一個基於this article的一個日期和兩個類型的自定義綁定,雖然我的簡單得多,但如果你只是想要練習或瞭解更多關於模型bindi ng,這是可行的。

編輯:對不起,以防萬一你決定嘗試ModelBinder的路線,這個例子是有點老了(也許MVC 1?)。我忘了需要進行額外的修改。 Theselinks應該有助於更新該示例。祝你好運。

+0

不錯的文章,是啊,我需要嘗試一些自定義模型綁定,希望模板現在可以工作。謝謝 – Pricey 2012-04-03 23:20:47

相關問題