2010-10-27 34 views
0

我正在爲bool數據類型製作一個MVC EditorTemplate,它將呈現包含True或False選項的下拉列表,並將所選值設置爲模型的價值。試圖爲呈現DDL的True或False的Bool製作MVC EditorTemplate

DDL呈現,但它沒有被設置爲模型的值。

我在這裏錯過了什麼?

這裏是我的視圖代碼:

<%:Html.EditorFor(model => model.Association.Active, "Bool")%> 

這裏是我的模板代碼:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<bool>" %> 
<% 
    string[] values = new string[2]; 
    values[0] = "True"; 
    values[1] = "False"; 
%> 
<div class="editor-row"> 
<div class="editor-label"> 
    <%= Html.LabelFor(model => model)%> 
</div> 
<div class="editor-field"> 
    <%= Html.DropDownListFor(model => model, new SelectList(values, Model))%> 
    <%= Html.ValidationMessageFor(model => model) %> 
</div> 
</div> 

我點綴碼一下,讓我使用REAL SelectListItems而不是字符串。但這仍然行不通。現在我得到一個兩個字符串的DDL,它們表示「System.Web.MVC.SelectListItem」而不是「true」和「false」。爲什麼在這裏發生?

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<bool>" %> 
<% 
    SelectListItem item1 = new SelectListItem(); 
    item1.Text = "True"; 
    item1.Value = "True"; 

    SelectListItem item2 = new SelectListItem(); 
    item2.Text = "False"; 
    item2.Value = "False"; 

    if (Model == true) 
    { 
     item1.Selected = true; 
     item2.Selected = false; 
    } 
    else 
    { 
     item1.Selected = false; 
     item2.Selected = true; 
    } 

    List<SelectListItem> items = new List<SelectListItem>(); 
    items.Add(item1); 
    items.Add(item2); 
%> 
<div class="editor-row"> 
<div class="editor-label"> 
    <%= Html.LabelFor(model => model)%> 
</div> 
<div class="editor-field"> 
    <%= Html.DropDownListFor(model => model, new SelectList(items))%> 
    <%= Html.ValidationMessageFor(model => model) %> 
</div> 
</div> 

回答

0

問題是的SelectList的構造了selectedValue參數正在尋找的object selectedValue值集合傳遞給它一個確切的實例。對於您的情況,您傳遞的值爲string[]作爲值集合,並且Boolean作爲選定的對象,因爲(bool)true != (string)"True"未找到匹配的項目。

而是做到這一點:

<%= Html.DropDownListFor(model => model, new SelectList(values, Model.ToString()))%> 
+0

彌敦道,你介意看第二個代碼示例我張貼?我編寫的原始方式適用於您的修補程序,但

+0

@Blackcoil如果在'

+0

明白了,謝謝! – Blackcoil 2010-10-27 21:19:30

0

Blackcoil - 你試過調整一號線:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.Boolean?>" %> 

可能不會幫助,但這是我的自定義複選框EditorTemplate如何定義爲我期望可以爲空的類型。

1

所以最後代碼工作:

public List<SelectListItem> YesNo()   
{ 

     SelectListItem item1 = new SelectListItem(); 
     item1.Text = "Yes"; 
     item1.Value = "True"; 
     SelectListItem item2 = new SelectListItem(); 
     item2.Text = "No"; 
     item2.Value = "False"; 
     List<SelectListItem> items = new List<SelectListItem>(); 
     items.Add(item1); 
     items.Add(item2); 
     return items; 
} 

在View:

@Html.DropDownListFor(model => model.CustomerAccess,new SelectList(
         new OrderProgression.Model.CommonList().YesNo(), 
         "Value","Text",Model.CustomerAccess.ToString())) 
相關問題