2011-12-14 25 views
71

Tôi đã sau trong phương pháp hành động của tôi:Làm thế nào tôi có thể kiểm tra ModelState.IsValid từ bên trong xem Razor tôi

 if (!ModelState.IsValid) 
     return View(vm); 

Trong giao diện Tôi muốn không có mặt một chìa khóa trình cho phép xóa nếu tình trạng mô hình là không hợp lệ. Có cách nào mà tôi có thể làm được không? Trạng thái mô hình có sẵn trong chế độ xem không?

Cập nhật: Tôi đã thực hiện điều này dựa trên câu trả lời tôi đã được đưa ra:

  <div class="adm_td0" style=" padding: 0;"> 
      @if (ViewData.ModelState.IsValid) { 
       <input type='submit' value='Delete' name='SubmitAction' /> 
      } 
       <input type='submit' value='Cancel' name='SubmitAction' /> 
      </div> 
+0

cũng đảm bảo bạn đang sử dụng Html.AntiForgeryToken. Hành động xóa có thể dễ dàng được giả mạo. Bạn có thể không quan tâm - (có thể là một ứng dụng nội bộ nhỏ) nhưng chỉ là một cảnh báo phụ. Chỉ vì nút không hiển thị không có nghĩa là nó không thể được gọi. Ngoài ra tôi sẽ kiểm tra modelstate trên phía máy chủ cũng như trên bài viết của bạn để đảm bảo một cái gì đó đã không thất bại ở phía khách hàng. –

Trả lời

160

Trạng thái mô hình có sẵn trong chế độ xem không?

Dĩ nhiên:

@if (!ViewData.ModelState.IsValid) 
{ 
    <div>There are some errors</div> 
} 
+0

Bạn có biết nếu có một cách để kiểm tra các lỗi cụ thể, chẳng hạn như: @if (ViewData.ModelState.Errors ["errorName"]) {// làm điều gì đó} – Owen

+12

Không sao, tôi đã tìm ra: Html .ViewData.ModelState ["PropertyName"]. Lỗi – Owen

+1

Tôi cũng sử dụng điều này để hiển thị một lỗi cụ thể trong bản tóm tắt xác thực, và nó hoạt động. @if (ViewData.ModelState.Keys.Any (x => x == "ErrorKeyName")) { @ Html.ValidationSummary (true, "") } – N0rA

10

Đó là không phổ biến để cần điều này trong quan điểm riêng của mình, nhưng bạn có thể truy cập vào nó như vậy:

@ViewData.ModelState.IsValid 
+1

Điều này sẽ được yêu cầu trước đó mặc dù. Không phải yêu cầu GIỚI THIỆU được gửi. –

+0

@ChrisKooken bạn có thể làm rõ những gì bạn có nghĩa là lại yêu cầu? Sự hiểu biết của tôi là ModelState sẽ chứa trạng thái của bất kỳ lỗi nào từ mô hình ràng buộc cho yêu cầu đang được xử lý tại thời điểm đó bởi máy chủ. –

+2

@NormanH, khi bạn sử dụng '@ ViewData.ModelState.IsValid' trong chế độ xem *, nó sẽ cho bạn biết trạng thái của mô hình đã được xử lý ngay trước khi hiển thị chế độ xem. Vì vậy, dòng chảy là: xem A -> nhấn nút và sau -> điều khiển: mô hình ràng buộc trước phương pháp B -> trạng thái không hợp lệ -> phương pháp B trả về xem B -> '@ ViewData.ModelState.IsValid' sẽ cho biết những gì đã xảy ra trong khi ràng buộc trước phương pháp B – bvgheluwe

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