2014-05-23 26 views
-1

我跟隨了MVC5教程,介紹如何使用枚舉來編寫助手擴展以填充下拉列表。這完美的工作,直到使用編輯視圖。如何設置使用助手擴展構建的EnumDropDownListFor的初始值?

在創建頁面上填寫ddl並選擇沒有問題。但是當我想更新編輯視圖上的值時,使用與創建時一樣填充的ddl,我不能將實際值(來自數據庫)默認爲顯示值。

我已經搜索了高和低,但開始認爲它不能完成。我不確定哪些代碼可以提供幫助,

我在編輯視圖

@Html.EditorFor(model => model.ProjectStatus) 

ProjectStatus DDL是用來檢索輔助擴展枚舉值和填充DDL枚舉。

所以我的DDL可以包含狀態如:

新建, WIP, 拒絕, 固定, 關閉

和我的電流值=新。所以,當我加載編輯視圖時,我希望將New值默認爲ddl,並且能夠通過使用ddl選擇另一個值來更改此值。

我想要默認的值實際上是在視圖(model.Status)中。我只是無法弄清楚如何在上面的代碼中包含它。

我希望這是有道理的,任何幫助表示讚賞。

感謝您的閱讀。

回答

0

我不完全確定你的擴展方法是什麼樣的。如果您想要更直接的答案,則需要在您的具體實施中包含更多細節。話雖這麼說,這裏是從edit.cshtml模板中的一些示例代碼上Autoquoter.com

<div class="control-group"> 
    @Html.LabelFor(model => model.AddonType) 
    <div class="controls"> 
      @Html.DropDownListFor(model => model.AddonType, EnumHelper.SelectListFor((AddonType)Model.AddonType)) 
      @Html.ValidationMessageFor(model => model.AddonType) 
    </div> 
</div> 

通知的參數EnumHelper.SelectListFor。我們將當前值傳遞給輔助方法。然後我們將它作爲SelectList構造函數的最終參數。

public static SelectList SelectListFor<T>(T selected) where T : struct 
    { 
     Type t = typeof(T); 
     return !t.IsEnum ? null 
         : new SelectList(BuildSelectListItems<T>(), "Value", "Text", selected.ToString()); 
    } 
0

對於任何可能感興趣的人,我使用jquery修復了這個問題。

我被懸掛在由枚舉,剃刀和html助手等填充的下拉。我看着生產的原始html,並從那個角度接近它。

下面的代碼對我的作品,但我不是專家,所以有可能是更好的解決方案

// set initial value of Status ddl 
$(document).ready(function() { 
var initialValue = $("#@Html.IdFor(model => model.Status)").val(); 
    $("select option").filter(function() { 
     return $(this).text() == initialValue; 
    }).prop("selected", true); 
}); 

我希望這有助於。