2012-02-24 13 views
0

Stackとオンラインチュートリアルの両方でお勧めすることをすべて実行した後、私の検証が機能しないようです。これを正しく設定しましたか?どんな指導も大歓迎です!私はこのようにそれを設定:MVC 3 Razor DropdownListクライアント側ValidationMessage

編集
INTが今提案につきNULL可能です。しかし、まだ動作していません。コメントABO以外

モデル

public class Subscribers 

     [Display(Name = "Channel: ")] 
     [Required(ErrorMessage = " Channel is required")] 
     public int? SelectedChannelID { get; set; } 

     public IEnumerable<SelectListItem> ChannelSelectList 
       { 
        get 
        { 
         Models.SwitchboardEntities db = new Models.SwitchboardEntities(); 
         List<Models.Channel> channelList = db.Channels.ToList(); 

         IEnumerable<SelectListItem> selectList = 
          from channel in channelList 
          select new SelectListItem 
          { 
           Text = channel.name, 
           Value = channel.id.ToString() 
          }; 

         return selectList; 
        } 

       } 

ビュー

@model Switchboard.Models.Subscribers 

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

     @Html.LabelFor(xModels => xModels.SelectedChannelID) 
     @Html.DropDownListFor(x => x.SelectedChannelID, Model.ChannelSelectList, "--Select Channel--", new Dictionary<string, object> { { "id", "ChannelsDDL" } }) 
     @Html.ValidationMessageFor(xModels => xModels.SelectedChannelID)  

のWebConfig

<appSettings> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    </appSettings> 
+1

'jquery.validate.unobtrusive.js'ファイルをレイアウトに含めましたか、その特定のビューに含めましたか? JSエラーが発生しましたか? –

+0

フェアポイント。私はそれらのはいを含めた。 JSエラーはありません。 – EKet

+0

あなたは何が起こると思いますか?検証が行われていないことをどのように知っていますか?コードから、無効な唯一の状態は、ユーザーがドロップダウンで項目を選択していないが、ドロップダウンで項目を選択しない方法がない場合です。 –

答えて

0

このドロップダウンがフォーム内に配置されていることを確認してください。クライアント側の検証が機能するために、あなたはどんなHTML5を放出しないであろう、フォームのコンテキストまたはHTMLヘルパーを必要とするデータ - *属性:

@using (Html.BeginForm()) 
{ 
    @Html.LabelFor(xModels => xModels.SelectedChannelID) 
    @Html.DropDownListFor(
     x => x.SelectedChannelID, 
     Model.ChannelSelectList, 
     "--Select Channel--", 
     new Dictionary<string, object> { { "id", "ChannelsDDL" } } 
    ) 
    @Html.ValidationMessageFor(xModels => xModels.SelectedChannelID)  
    <button type="submit">OK</button> 
} 

を、これは例えば(フォーム内にない場合は、このドロップダウンリストが内側にあります生成されたページのソースコードを

@{ 
    ViewContext.FormContext = new FormContext(); 
} 

@Html.LabelFor(xModels => xModels.SelectedChannelID) 
@Html.DropDownListFor(
    x => x.SelectedChannelID, 
    Model.ChannelSelectList, 
    "--Select Channel--", 
    new Dictionary<string, object> { { "id", "ChannelsDDL" } } 
) 
@Html.ValidationMessageFor(xModels => xModels.SelectedChannelID)  

ルック:)部分と対応するフォームは、この部分の外側にある手動でヘルパーは必要な属性を生成強制的にフォームのコンテキストをシミュレートすることができます。 DATA- <select>タグは、HTML5で飾られていることを確認してください*そのように属性:

<select data-val="true" data-val-number="The field Channel: must be a number." data-val-required=" Channel is required" id="ChannelsDDL" name="SelectedChannelID"> 
    ... 
</select> 

DATA-が存在しない場合は*クライアント側の検証が動作しません属性。

サーバー側の検証はすべての場合に有効です。

+0

手に顔を...フォームを忘れてしまった。ダーリンに感謝します。 – EKet

0

また、web.configで邪魔にならない検証が有効になっていることを確認してください。

1

何かを検証する方法はありません。

SelectedChannelIDはintであり、null値ではありません。したがって、常に選択された値を持ちます。したがって、Requiredは決して起動しません。 Requiredは、値がnullの場合にのみ発生し、intを使用する場合は不可能です。

+0

はnullをintにしました。まだ問題。おかげでミステリー! – EKet

+1

さらに分析する。私はあなたがコントロールのIDの名前を変更していることに気付きました。あなたがそれをしないとどうなりますか? –

+0

Mystere Manはここにいると思います。 ValidationMessageForは、検証するコントロールの推定IDをポイントします。これはプロパティの名前であるとみなされます。 –

関連する問題