2016-11-21 42 views
-1

不同DropDownList的選定值我有了下面這樣的觀點:爲同一EditorTemplate

<div> 
    @Html.EditorFor(model => model.Phone1) 
</div> 
<div> 
    @Html.EditorFor(model => model.Phone2) 
</div> 
<div> 
    @Html.EditorFor(model => model.Phone3) 
</div> 

每個字段的是手機類的一個實例。在EditorTemplate的電話我:

@Html.DropDownList("PhoneTypeID", null, htmlAttributes: new { @class = "btn"}) 

在控制器中,我有:

ViewBag.PhoneTypeID = new SelectList(db.PhoneTypes, "PhoneTypeID", "Type", PhoneTypeIDValue); 

現在,每三個在下拉列表中得到相同的選擇的價值,因爲他們使用的是相同的SelectList對象。

當我從控制器填充它們並使用相同的editorTemplate時,是否有辦法讓這三個下拉列表中的每一個都有不同的選定值?

理想的情況下,它會是這個樣子:

ViewBag.Phone1.PhoneTypeID = new SelectList(db.PhoneTypes, "PhoneTypeID", "Type", Phone1.PhoneTypeIDValue); 
ViewBag.Phone2.PhoneTypeID = new SelectList(db.PhoneTypes, "PhoneTypeID", "Type", Phone2.PhoneTypeIDValue); 
ViewBag.Phone3.PhoneTypeID = new SelectList(db.PhoneTypes, "PhoneTypeID", "Type", Phone3.PhoneTypeIDValue); 

然而,當我這樣做,我得到的錯誤:

Cannot perform runtime binding on a null reference

+0

可以編寫'新SelectListItem {VALUE =「」,文本=「」}'; – Perdido

+0

你是什麼意思「當我填充它們時選擇不同的值」? – Hadee

+0

@Hadee呈現視圖時,每個下拉列表應該有不同的選定值 – bak

回答

-1

彼時我只是在做這在JavaScript。我把TempData的,然後在視圖我看TempData的設定值的值,所以它看起來像如下:

控制器:

ViewBag.PhoneTypeID = new SelectList(db.PhoneTypes, "PhoneTypeID", "Type"); 
if(model.Phone1 != null) 
{ 
    TempData["Phone1Type"] = model.Phone1.PhoneTypeID; 
} 
if (model.Phone2 != null) 
{ 
    TempData["Phone2Type"] = model.Phone2.PhoneTypeID; 
} 

查看:

<div> 
    <div> 
    @Html.EditorFor(model => model.Phone1) 
    </div> 
    <div> 
    @Html.EditorFor(model => model.Phone2) 
    </div> 
</div> 
@section Scripts { 
<script> 
    $(document).ready(function() { 
     if ('@TempData["Phone1Type"]' != "") { 
      document.getElementById("Phone1_PhoneTypeID").selectedIndex = @TempData["Phone1Type"]; 
     } 
     if ('@TempData["Phone2Type"]' != "") { 
      document.getElementById("Phone2_PhoneTypeID").selectedIndex = @TempData["Phone2Type"]; 
     } 
    }); 
</script> 
} 

希望這有幫助!

0

我覺得問題就是你的方法。更改

ViewBag.Phone1.PhoneTypeID = new SelectList(db.PhoneTypes, "PhoneTypeID", "Type", Phone1.PhoneTypeIDValue); 

要:

var phoneTypes = db.PhoneTypes!= null ? db.PhoneTypes.Select(phoneType=> new { PhoneTypeID= phoneType.Id, Type= phoneType.type }) : null; 
ViewBag.PhoneType1 = phoneTypes != null ? new SelectList(phoneTypes , "PhoneTypeID", "Type", phoneTypes.PhoneTypeIDValue) : null; 

變化phoneType.IdphoneType.type根據您phoneTypes屬性的專有名稱。

0

傳遞您共同SelectListEditorTemplate使用aditionalViewData(的EditorFor()第二個參數)

在GET方法,使用

ViewBag.PhoneTypeList = new SelectList(db.PhoneTypes, "PhoneTypeID", "Type"); 

注意,屬性名稱不應該產生SelectList與綁定到的屬性相同(如果是,則會丟失客戶端驗證),並且在綁定到模型屬性時忽略SelectList的第4個參數。

然後在主視圖中的代碼應該是

@Html.EditorFor(m => m.Phone1, new { phonelist = ViewBag.PhoneTypeList }) 
@Html.EditorFor(m => m.Phone2, new { phonelist = ViewBag.PhoneTypeList }) 

並在EditorTemplate

@Html.DropDownListFor(m => m.PhoneTypeID, (IEnumerable<SelectListItem>)ViewData["phonelist "]), new { @class = "btn" }) 

在每個下拉列表的正確的選項現在將基於所述PhoneTypeID屬性的值來選擇。

注意的是,優選的方法是使用含有用於SelectList屬性視圖模型,而不是使用ViewBag