2013-09-05 22 views
14

Bối cảnh của tôiASP.NET MVC Validation trong phần Xem và quay về xem Chánh

tôi đang làm việc trên dự án nghiêm túc đầu tiên sử dụng ASP.NET MVC 4. Tôi đang làm việc về phát triển web từ cổ điển ngày ASP và có nắm giữ tốt trên Webforms. MVC rất thú vị và đang tiến triển tốt. Nhưng bây giờ tôi đang ở trong một tình huống mà tôi cần sự giúp đỡ trên diễn đàn này.

nền Query

tôi có một cái nhìn mẹ và bên trong nó có một cái nhìn cục bộ. Chế độ xem một phần có chứa biểu mẫu và nút gửi. Chế độ xem từng phần có mô hình chế độ xem cục bộ riêng và mô hình xem đó là một trong các thuộc tính của mô hình Chế độ xem cha mẹ.

Trong trường hợp xác thực trên một phần lượt xem không thành công, tôi muốn hiển thị chế độ xem gốc dưới dạng và làm nổi bật trường không hợp lệ trong chế độ xem từng phần.

Mã không bị hỏng ở bất kỳ đâu nhưng khi có lỗi xác thực, bằng cách nào đó, tôi không tìm đúng cách để hiển thị chế độ xem cha mẹ với mô hình được khởi tạo được truyền cho nó. Và tất nhiên, để làm nổi bật các lỗi trong chế độ xem từng phần.

Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn.

Mã trông giống như sau:

Xem Models:

public class ParentViewModel 
{ 
    public int TitleId { get; set; } 
    public string Name { get; set; } 
    public ChildViewModel Child { get; set; } 
} 

public class ChildViewModel 
{ 
    [Required] 
    public decimal Rating { get; set; }   

    [Required] 
    [StringLength(500)] 
    [Display(Description = "Review")] 
    [RegularExpression("([a-zA-Z0-9 .&'-]+)", ErrorMessage = "Enter only alphabets and numbers of First Name")] 
    public string ReviewText { get; set; } 
} 

khiển

public class TestController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new ParentViewModel() 
         { 
          TitleId = 1,Name = "Parent name", 
          Child = new ChildViewModel() 
             { 
              Rating = 2.5M, ReviewText = "Its a must watch!" 
             } 
         }; 
     return View("Index", model); 
    } 

    [HttpPost] 
    public ActionResult SubmitReview(ChildViewModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      return View("_child", model); 
     } 

     ModelState.AddModelError("", "Some Error."); 
     return View("_child", model); 
    } 
} 

Chánh Xem

@model ParentViewModel 
@{ 
    Layout = null; 
} 
<!DOCTYPE html> 
<html> 
<head> 
    <title>Index</title> 
</head> 
<body> 
    <div> 
     @Model.TitleId, @Model.Name   
    </div> 
    <div> 
     @Html.Partial("_child", Model.Child) 
    </div> 
</body> 
</html> 

Partial View (_child.cshtml)

@model ChildViewModel 
@using (Html.BeginForm("SubmitReview", "Test")) 
{ 
    @Html.ValidationSummary(true) 

    @Html.TextBoxFor(m => m.Rating)  @Html.ValidationMessageFor(m => m.Rating) 
    @Html.TextBoxFor(m => m.ReviewText) @Html.ValidationMessageFor(m => m.ReviewText) 
    <input type="submit" value="Log in" /> 
} 

Trả lời

8

Bạn cần phải chứng minh quan điểm cha mẹ không phải là con một, vì vậy hành động nên hình như:

[HttpPost] 
    public ActionResult SubmitReview(ChildViewModel model) 
    { 
      var parentViewModel = write init code here; 
      parentViewModel.ChildModel = model; 

     if (ModelState.IsValid) 
     { 

      return View("Index", parentViewModel); 
     } 

     ModelState.AddModelError("", "Some Error."); 
     return View("Index", parentViewModel); 
    } 
+0

Điều đó làm cho cảm giác hoàn hảo . Nhưng liệu có cách nào để tránh khởi tạo lại mô hình gốc khi gửi? Ngay bây giờ tôi đang cố gắng để vượt qua mô hình cha mẹ để SubmitReview, nhưng mô hình phụ huynh không nhớ các giá trị. Nhưng cảm ơn cho đề xuất của bạn, tôi sẽ thực hiện coz đó nó sẽ làm việc. –

+0

khi gửi, tôi nên giữ khóa của phụ huynh để khởi tạo nó như thế nào? Tôi hy vọng tôi đang làm một số ý nghĩa ..... –

+0

Bạn có thể di chuyển biểu mẫu sang chế độ xem gốc (thực tế là thực hành tốt), sau đó thêm mô hình chính vào trường ẩn để khi bạn nhấp gửi, bạn sẽ nhận được dữ liệu đầy đủ trong bộ điều khiển –

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