2012-12-16 63 views
2

我在輸入表單中有其他字段和下拉列表。他們都證實罰款。即使是沒有正確驗證前端的兩個元素,仍然可以在帖子中正確模擬綁定。我不完全確定他們爲什麼不驗證。下面是設置:DropDownListFor對於有問題驗證的複雜模型

視圖模型

public class DataVM 
{ 
//Widgets used, populated from database 
public List<Widget> Widgets { get; set; } 

//Contains data to populate a dropdown with 
public GenericSelectList Containers { get; set; } 

//This will hold the relation between the widget and container 
//where widget is the local id, and container foreign id 
public List<NestedDictionary> WidgetContainers { get; set; } 
} 

public class NestedDictionary 
{ 
    [RegularExpression("/^[1-9][0-9]*$/")] 
    [Required]//This is not being enforced 
    public int? ForeignId { get; set; } 

    public int LocalId { get; set; } 
} 

查看

@for (int i = 0; i < Model.Widgets.Count; i++) 
{ 
@Html.Hidden("WidgetContainers["+i+"].LocalId", Model.Widgets.ElementAt(i).WidgetId) 
<div> 
    <div> 
    <span>Container Used</span><hr /> 
    </div> 
    <div class="editor-field"> 
    @Html.DropDownListFor(
    m => m.WidgetContainers.ElementAt(i).ForeignId, 
    new SelectList(
    Model.Containers.Values, 
    "Id", 
    "DisplayFields", 
    0 
    ), 
    " - Select A Container - " 
    ) 
    <br />@Html.ValidationMessageFor(model => model.WidgetContainers.ElementAt(i).ForeignId) 
    </div> 
</div> 
} 

一切都顯示就好了。它是互動的,值是正確的。發佈時,正確的數據將傳遞到正確的位置。但是,如果沒有選擇容器,那麼該帖子就會很好,通過值爲0。有點在這裏虧本。任何想法爲什麼驗證不起作用客戶端?

EDIT

這裏是隱藏的輸入的呈現的HTML,和選擇元件

隱藏:

<input id="WidgetContainers_0__LocalId" type="hidden" value="39" name="WidgetContainers[0].LocalId"> 

選擇:

<select name="ForeignId" id="ForeignId" class="valid"> 

顯然選擇應該有不同的屬性de罰款。

編輯#2

如果我使用

m => m.WidgetContainers[i].ForeignId, 

然後我得到

<select id="WidgetContainers_0__ForeignId" name="WidgetContainers[0].ForeignId" class="valid"> 

回答

-1

,因爲它不是空的。如果你想在客戶端驗證工作,你應該讓ForeignId爲空不0 並且當您在第一時間

new SelectList(
Model.Containers.Values, 
"Id", 
"DisplayFields", 
0 // Don't set this default value 
) 
+0

創建下拉這是不正確。零表示設置了默認值。無論如何,當某人選擇一個空選項時,該字段應顯示爲無效。如果用戶選擇了標題選項,其值爲'「」',那麼驗證就應該啓動了。還要注意select元素上完全沒有數據屬性。 –

+0

我不知道你有一些DropDown Itmes與空值,那麼我預計這是問題抱歉:) –