2011-05-05 69 views
0

我想創建一個更「高級」的編輯對我的MVC Web應用程序模板,但我有困難的一點點。在我解釋之前,讓我顯示我的源代碼。多模型訪問

這是在我看來代碼(使用模板):

@Html.EditorFor(model => model.Height, "UnitTemplate", new { unitModel = Model.HeightUnit, unitType = Units.Distance }) 

這裏是模板:

@{ 
    Layout = null; 
} 
@using MyProject.Models; 

@{ 
    var unitModel = this.ViewData["unitModel"]; 
    var unitType = this.ViewData["unitType"] as SelectList; 
} 

<div class="data-group"> 
    <div class="editor-label"> 
     @Html.LabelFor(model => model) 
    </div> 
    <div class="option1"> 
     @Html.TextBoxFor(model => model) 
    </div> 
    <div class="units">@Html.DropDownListFor(model => unitModel, unitType, new { @class = "unit" })</div> 
    <div class="validation"> 
     <div>@Html.ValidationMessageFor(model => model)</div> 
    </div> 
</div> 

正如你所看到的,我有一定的價值(在這種情況下,高度),我也有一個與該值相關聯的單位類型(HeightUnit)。我希望能夠通過一般與模型相關聯(因爲我使用在相當多的地方這個模板)的單位價值,以及以及單元的類型(因爲這也可以更改)。最終,目標是讓用戶在值之間快速轉換。

幸運的是,一切都運行到這一點(轉換,人口等),不同的是,當我保存的效果,unitModel不會保存到數據庫中。有人有什麼建議,我可以做些什麼來實現這個目標?

回答

1

你可能想使用編輯器模板在這種情況下,整個模型此模板依賴於主視圖模型的多個屬性(HeightHeightUnit):

@Html.EditorForModel("UnitTemplate") 

,然後在~/Views/Shared/EditorTemplates/UnitTemplate.cshtml編輯器模板:

@using MyProject.Models; 
@model MyViewModel 
@{ 
    Layout = null; 
} 
<div class="data-group"> 
    <div class="editor-label"> 
     @Html.LabelFor(model => model.Height) 
    </div> 
    <div class="option1"> 
     @Html.TextBoxFor(model => model.Height) 
    </div> 
    <div class="units"> 
     @Html.DropDownListFor(
      model => model.HeightUnit, 
      Units.Distance, 
      new { @class = "unit" } 
     ) 
    </div> 
    <div class="validation"> 
     <div> 
      @Html.ValidationMessageFor(model => model.Height) 
     </div> 
    </div> 
</div> 
+0

我的確想到了這一點,但問題在於,單位變量的名稱與單位類型不同。我計劃在整個我的網站中使用這個模板,而不僅僅是一個或兩個值。 – JasCav 2011-05-05 15:29:46

+0

@JasCav,如果您具有約束力的下拉列表的變量不同,您將需要重新適應你的POST操作接收以選定值正確綁定視圖模型。查看HTML源代碼中已生成的名稱屬性,並且您應該在POST操作中使用相同的名稱來獲取該值。 – 2011-05-05 15:38:40

+0

好的,這是有道理的。我沒看名字,看到這一切被命名爲「[MODELNAME] .unitType」 - 在這個例子中這樣Height.unitType。我不確定我是否理解如何在控制器中綁定這個。如果你可以提供一個例子,它將不勝感激。 +1在此期間。 – JasCav 2011-05-05 16:07:38