2012-05-04 23 views
5

Tôi có một đầu vàoMVC 3 lĩnh vực validate từ xa có một cái tên phức tạp

@Html.TextBoxFor(m => m.Buyer.Email, new { @maxlength = "100" }) 

Tôi muốn xác nhận nó với thuộc tính từ xa

[Remote("IsUserNameAvailable", "Validation")]   
public string Email { get; set; } 

Trong điều khiển xác nhận tôi có một hành động:

[HttpPost] 
public JsonResult IsUserNameAvailable(string Email) 

Nhưng, tất nhiên tôi nhận được giá trị null trong tham số Email. Tôi nên chuyển tên tham số nào cho phương thức IsUserNameAvailable?

Cập nhật: Chỉ cần xem yêu cầu, được gửi đến hành động xác thực từ xa: http://myhost/Validation/[email protected] Tên thông số là Buyer.Email, tôi nên chuyển nó như thế nào?

Trả lời

0

Thay vì HttpPost sử dụng HttpGet. Bạn không đăng bất cứ thứ gì. Bạn đang truy xuất kết quả. Thứ hai, hãy chắc chắn rằng khi bạn trả về kết quả từ IsUserNameAvailable, bạn xác định rằng bạn cho phép JSON nhận được.

[HttpGet] 
public JsonResult IsUserNameAvailable(string Email) 
{ 
    // Do something 
    if (your_email_check_returns_true) 
    { 
     return Json(true, JsonRequestBehavior.AllowGet); 
    } 

    return Json(false, JsonRequestBehavior.AllowGet); 
} 
+1

Tôi cho rằng bạn đã không nắm bắt được ý tưởng về vấn đề. Tôi nói, khi tham số của tôi được gọi là Email - nó là null, vì tên của nó phải tương ứng với tên của trường mà nó xác nhận. Tôi đã xóa [HttpPost] và vẫn nhận được tham số Email là null. –

+0

Hãy xem câu hỏi và trả lời SO này: http://stackoverflow.com/questions/5121160/display-the-result-of-remoteattribute-in-mvc-3-0. Bạn đang đi đúng hướng. Chỉ một câu hỏi, ý tưởng đằng sau @maxlength là gì? Bạn đã thử sử dụng thuộc tính StringLength chưa? –

+0

@maxlength - chỉ cần thêm thuộc tính html, giới hạn chiều dài của chuỗi trên trang –

0

Vì bạn không thể đặt tên cho chuỗi bất động sản là "Buyer.email", mà nên làm việc ... Nếu bạn mong đợi một "người mua" mô hình điểm trong điều khiển của bạn và để cho ModelBinder để cư thuộc tính email của người mua?

+0

Điều này, tất nhiên, sẽ giúp ích. Nhưng tôi muốn mở rộng mô hình với một số trường ngoại trừ các trường từ thực thể người mua. Ngay bây giờ tôi đang đọc giá trị trực tiếp từ querystring và nó hoạt động tốt cho tôi –

0

Hãy thử thay đổi chữ ký của hành động của bạn để bao gồm một tiền tố ràng buộc:

public JsonResult IsUserNameAvailable([Bind (Prefix="Buyer.") ] string Email) 
Các vấn đề liên quan