2010-01-04 29 views
5

Tôi dường như không nhận được bất kỳ xác thực phía máy khách nào hoạt động trên ứng dụng MVC 2 RC.Xác thực phía máy khách ASP.NET MVC 2 RC không hoạt động

mô hình của tôi có như sau:

public class ExampleModel 
{ 
    [Required(ErrorMessage="Test1 is required")] 
    [DisplayName("Test1")] 
    public string Test1 { get; set; } 

    [Required(ErrorMessage="Test2 is required")] 
    [DisplayName("Test2")] 
    public string Test2 { get; set; } 
} 

Quan điểm của tôi có đoạn mã sau:

<% Html.EnableClientValidation(); %> 
<%= Html.ValidationSummary(true, "Test was unsuccessful.") %>  
<% using (Html.BeginForm()) { %> 
<div> 
    <div class="editor-label">Test1:</div> 
    <div class="editor-field"> 
     <%= Html.TextBoxFor(m => m.Test1) %> 
     <%= Html.ValidationMessageFor(m => m.Test1) %> 
    </div> 

    <div class="editor-label">Test2:</div> 
    <div class="editor-field"> 
     <%= Html.TextBoxFor(m => m.Test2) %> 
     <%= Html.ValidationMessageFor(m => m.Test2) %> 
    </div> 

    <p> 
     <input type="submit" value="Test" /> 
    </p> 
</div> 

tôi để lại cả hai lĩnh vực trống và nhấn vào nút Test và nó đi đúng bài handler của bộ điều khiển không có xác thực phía khách hàng nào xảy ra. Tôi không chắc chắn những gì tôi đang mất tích.

Tôi có javascript sau đây cũng bao gồm trong giao diện (không chắc chắn nếu tôi cần nó tất cả):

<link href="../../Scripts/jquery-1.3.2.min.js" type="text/javascript" /> 
<link href="../../Scripts/jquery.validate.min.js" type="text/javascript" />  
<link href="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript" /> 

Bất kỳ ý tưởng những gì tôi đang làm sai. Tôi cảm thấy như tôi đang thiếu một cái gì đó đơn giản và tài liệu cho MVC 2 là thưa thớt.

Edit: Tôi đã thêm liên kết:

<link href="../../Scripts/MicrosoftMvcJQueryValidation.js" type="text/javascript" />

Và tôi đã bao gồm các tập tin trong dự án của tôi mà tôi đã phải tải về từ trên các liên kết trong các câu trả lời. Vẫn không làm việc gì cả. Bất kỳ ý tưởng nào khác?

Edit: Tôi đang sử dụng Visual Studio 2008 với MVC 2 RC (không beta) và tôi đang tìm kiếm bất kỳ ví dụ có thể tải về hoặc gửi xác nhận client-side làm việc với việc phát hành RC.

Trả lời

7

Ok tôi đã tìm ra điều này ... và nó là 100% lỗi của tôi. Mặc dù, một vài bài viết bao gồm một số thông tin mà tôi cũng cần.

Vấn đề chính mà tôi ngạc nhiên không ai nhận thấy, là HTML của tôi có bao gồm các tập lệnh ... tra cứu bài đăng của tôi và xem liệu bạn có thể thấy sự cố không.

Tôi đã sử dụng thẻ <link href=... thay vì thẻ <script src=... thích hợp. Hoàn toàn là lỗi của tôi vì tôi đã nhanh chóng cắt và dán liên kết CSS mà không cần suy nghĩ và chỉ thay đổi loại và tệp. Duh !!!

Anyways các liên kết đúng yêu cầu là:

<script src="/Scripts/jquery-1.3.2.min.js" type="text/javascript"></script> 
<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script> 
<script src="/Scripts/MicrosoftMvcJQueryValidation.js" type="text/javascript"></script> 

Mọi hoạt động sau đó. Bạn chắc chắn cần phải bao gồm tệp 'MicrosoftMvcJQueryValidation.js' từ dự án tương lai để tôi upvoted tất cả các bài đăng đã đề cập đến điều đó.

Hết hộp mặc dù tệp đó KHÔNG được bao gồm. Nếu bạn không lo lắng về việc sử dụng JQuery sau đó bạn chỉ có thể sử dụng sau đây bao gồm sử dụng thi hành Microsoft mà sẽ làm việc ra khỏi hộp với RC:

<script src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script> 
<script src="/Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script> 
<script src="/Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>  

Tôi hy vọng tôi có thể tiết kiệm ít nhất một người một số đau buồn. .. Tôi vẫn không thể tin rằng làm thế nào tôi có thể có hơi say lên bao gồm và không nhận thấy nó cho sooooo dài.

Cảm ơn bạn một lần nữa vì sự giúp đỡ của bạn.

2

Bạn có chắc chắn bao gồm các tệp JS chính xác không? Bởi vì trong Phill Haack's post nó có MicrosoftMvcJQueryValidation.js được đính kèm thay vì MicrosoftMvcValidation.js.

Ông cũng đặt ClientValidationFunction tài sản trong giao diện:

<% ViewContext.FormContext.ClientValidationFunction 
= "EnableClientValidation"; %> 

Mặc dù đó không phải là RC, nhưng Beta.

+1

'<% ViewContext.FormContext.ClientValidationFunction =" EnableClientValidation "; %> 'không còn hoạt động trong RC. Bây giờ là một cuộc gọi hàm, xem: 'Html.EnableClientValidation();' – Kelsey

2

Hệ thống xác thực mặc định (và chỉ được hỗ trợ bởi Microsoft) trong Ứng dụng phát hành ASP.NET MVC 2 không sử dụng jQuery Validate. Thay vào đó, nó sử dụng một hệ thống xác thực mới tồn tại hoàn toàn trong MicrosoftMvcValidation.js (mặc dù bạn cũng cần phải bao gồm MicrosoftAjax.js).

Nếu bạn muốn sử dụng thư viện jQuery Validate, nó được bao gồm như một phần của dự án ASP.NET MVC Futures (có sẵn here), là một tệp tải xuống riêng biệt và có tệp tập lệnh bộ điều hợp riêng.

Ngoài ra, về trình trợ giúp Html.ValidationSummary(), tôi tin rằng nó cần được bao gồm bên trong biểu mẫu nếu bạn muốn nó có chức năng phía máy khách mới. Nó sẽ vẫn hoạt động nếu nó ở bên ngoài biểu mẫu, nhưng nó sẽ chỉ làm việc phía máy chủ.

+0

Xin chào, tôi không đồng ý (-1). ASP.NET MVC RC hỗ trợ (như Phill Haack đã viết trên blog của mình) bất kỳ khung công tác xác thực phía máy khách và máy chủ tương thích nào. Đối với trang web của khách hàng, tức là jQuery.validate và cho phía máy chủ xVal, Lâu đài, v.v. Html.ValidationSummary() doen't cần phải ở bên trong biểu mẫu, nó có thể ở bất kỳ đâu trên trang. – Feryt

+0

Bởi "được hỗ trợ", tôi có nghĩa là "được hỗ trợ bởi Microsoft" và tuyên bố của tôi là chính xác. Nhà cung cấp xác thực khách hàng trong hộp duy nhất trong ASP.NET MVC 2 RC là cho một thư viện xác nhận hợp lệ mới, không phải cho jQuery. Bạn có thể cắm vào các thư viện khác - chúng không được Microsoft hỗ trợ. – Eilon

3

Bạn phải bao gồm MicrosoftMvcJQueryValidation.js file:

<link href="MicrosoftMvcJQueryValidation.js" type="text/javascript" />

Kiểm tra này: Where is the right version of MicrosoftMvcJQueryValidation.js for MVC 2 beta 2?

Tiếp theo chỉ cần đặt Html.EnableClientValidation(); đâu đó trong Xem trang. Nó phải trước biểu mẫu đầu tiên bạn muốn xác thực phía máy khách. Tôi thích trang Site.Master.

Làm việc trên ASP.NET MVC 2 RC.

7

Khi bạn cập nhật dự án từ MVC 2 Beta, hãy sử dụng: /src/MvcFutures/MicrosoftMvcJQueryValidation.js từ MVC 2 RC Mã nguồn gói (link). Phiên bản Beta cũ hơn không hoạt động chính xác với jquery.validation trong RC. file javascript cần thiết là:

<script src="/Scripts/jquery-1.3.2.min.js" type="text/javascript" /> 
<script src="/Scripts/jquery.validate.min-vsdoc.js" type="text/javascript" /> 
<script src="/Scripts/MicrosoftMvcJQueryValidation.js" type="text/javascript" /> 

phiên bản Quyền MicrosoftMvcJQueryValidation.js chứa $ (document) .ready() này chức năng:

// need to wait for the document to signal that it is ready 
$(document).ready(function() { 
    var allFormOptions = window.mvcClientValidationMetadata; 
    if (allFormOptions) { 
     while (allFormOptions.length > 0) { 
      var thisFormOptions = allFormOptions.pop(); 
      __MVC_EnableClientValidation(thisFormOptions); 
     } 
    } 
}); 

ở phần cuối của tập tin (trong RC phát hành).

+0

Tôi đã tải xuống và bao gồm tệp này chính xác như bạn có nhưng vẫn không xác thực bên ứng dụng khách. Bất kỳ đề xuất về cách tôi có thể chẩn đoán những gì là sai? – Kelsey

+0

Thử: 1) kiểm tra xem trang có hiển thị phần JS bắt đầu bằng: ..if (! Window.mvcClientValidationMetadata) {.. khi không, vui lòng nhập trình tự: <% Html.EnableClientValidation(); %> before BeginForm() 2) thử gỡ lỗi $ (tài liệu) .ready() từ asnwer trên 3) kiểm tra xem bạn có sử dụng axely .js như tôi đã mô tả không – Martin

Các vấn đề liên quan