0

現在のアプリケーションで目立たないクライアント側の検証を使用していますが、問題は、すべてのフィールドではなく一部のフィールドのみを検証していることです。最初は、DropDownLists はバリデータによって省略されたものだと思っていましたが、単純な TextBoxes 用に変更した後、それも機能していないことに気付きました。私はそれが何であるかを本当に知りません。だから、あなたが私に手を差し伸べてくれることを願っています:

私はすでに私のWeb.Configに持っています:

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

正しく機能していないクラスの 1 つのメタデータがあります。

[MetadataType(typeof(QuestionMetadata))]
public partial class Question
{
    [Bind(Exclude = "Id")]
    public class QuestionMetadata
    {
        [Required]
        public string Text { get; set; }

        [Required]
        [DisplayName("Question Type")]
        public int QuestionType_Id { get; set; }

        [Required]
        [DisplayName("Category")]
        public int Category_Id { get; set; }

        [Required]
        [Range(1,Int32.MaxValue)]
        public int SortOrder { get; set; }
    }
}

最後に ViewCode:(厳密に型指定され、ViewModel を受け取ります)

<asp:Content ID="Content2" ContentPlaceHolderID="JsContent" runat="server">
   <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>
   <script src="<%: Url.Content("~/Scripts/question-views.js") %>" type="text/javascript"></script>
</asp:Content>

<asp:Content ID="Content3" ContentPlaceHolderID="MainContent" runat="server">
<h2 class="path"><%= ViewRes.Question.Create.PathCreate %></h2>

    <% using (Html.BeginForm()) { %>
        <%: Html.ValidationSummary(true) %>
            <div>
               <%: ViewRes.Question.Create.DropDownQuestionnaires %>
               <%: Html.DropDownList("Questionnaire_Id", Model.questionnairesList, "--Select--")%>
            </div>

            <div class="editor-label">
                <%: Html.LabelFor(model => model.question.Category_Id)%>
            </div>            
            <div class="editor-field">
                <%: Html.DropDownListFor(model => model.question.Category_Id, Model.categoriesList, "--Select--")%>
                <%: Html.ValidationMessageFor(model => model.question.Category_Id)%>
            </div>

            <div class="editor-label">
                <%: Html.LabelFor(model => model.question.QuestionType_Id)%>
            </div>
            <div class="editor-field">
                <%: Html.DropDownListFor(model => model.question.QuestionType_Id, Model.questionsTypeList, "--Select--")%>
                <%: Html.ValidationMessageFor(model => model.question.QuestionType_Id)%>
            </div>

            <div class="editor-field">
                <%: Html.EditorFor(model => model.question.Text)%>
            </div>            

            <div class="editor-label">
                <%: Html.LabelFor(model => model.question.SortOrder)%>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.question.SortOrder)%>
                <%: Html.ValidationMessageFor(model => model.question.SortOrder)%>
            </div>

            <p>
                <input type="submit" value="<%: ViewRes.Shared.CreateButton %>" />
            </p>
    <% } %>

</asp:Content>

助けてくれてありがとう。

4

3 に答える 3

0

プロパティをnull可能にしてみましたか? public int? Category_Id { get; set; }

于 2011-07-06T21:52:00.827 に答える
0

生成された HTML を見てみましょう。クライアント側の検証を受けるすべてのフィールドについて、次のようなものが表示されます

<input class="text-box single-line" data-val="true" data-val-required="The Text field is required." id="Text" name="Text" type="text" value="blah-blah" /&gt;
<span class="field-validation-valid" data-valmsg-for="Text" data-valmsg-replace="true"></span>

次に、トラブルシューティングが簡単です:検証コードが生成されない、または検証が行われない、または(テキストフィールドの例のように、検証行われますがHtml.ValidationMessage()、ないため、エラー一向に現れな​​い…

于 2011-07-06T23:16:36.950 に答える
0

レイアウトにコア Jquery スクリプトを挿入していますか?

<script src="<%: Url.Content("~/Scripts/jquery-1.5.1.min.js") %>" type="text/javascript"></script>

Firebug を使用して、検証中にスクリプト エラーがスローされるかどうかを確認することもできます。

于 2011-07-06T22:30:05.413 に答える