2012-10-23 40 views
9

Tôi sử dụng tác vụ cập nhật để cập nhật dựa trên dữ liệu nhập từ @ Html.Textbox.Xác thực @ Html.Textbox trong MVC4

@using (Html.BeginForm("Update", "Shopping", new { UserID = Request.QueryString["UserID"] }, FormMethod.Post, new { id = "myForm" })) 
    {    
    @Html.ValidationSummary()     
    @Html.Hidden("id", @Request.QueryString["UserID"] as string) 
    @Html.Hidden("productid", item.ProductID as string) 
    @Html.TextBox("Quantity", item.Quantity) 
    @Html.ValidationMessage("Quantity", "*") 
    @Html.Hidden("unitrate", item.Rate)    
    <input type="submit" value="Update" /> 
    } 

và Trong lớp Mẫu My

 [Required(ErrorMessage = "Quantity is required.")] 
     [Display(Name = "Quantity")] 
     [Range(2, 100, ErrorMessage = "There is not enough inventory for the product to fulfill your order.")] 
     public int? Quantity { get; set; } 

Vấn đề là tôi đang không nhận được thông báo xác nhận khi textbox trống. Nhưng khi tôi sử dụng @ Html.TextBoxFor

@Html.TextBoxFor(modelItem => item.Quantity) 
    @Html.ValidationMessageFor(modelitem => item.Quantity) 


Tôi nhận được thông báo xác nhận. và hành động cập nhật của tôi không hoạt động.
Ở đây tôi có hai tùy chọn.
1. Cách chuyển tên hộp văn bản "qty" trong @ Html.TextboxFor ?? (Hoặc)
2. Làm thế nào để có được những thông điệp xác nhận trong @ Html.Textbox() sử dụng @ Html.ValidationMessage()

Bất kỳ lời đề nghị ..

EDIT: Cập nhật hành động của tôi

[HttpPost] 
    public ActionResult Update(string id, string productid, int Quantity, decimal unitrate) 
     { 
     if (ModelState.IsValid) 
     { 
        int _records = UpdatePrice(id, productid, Quantity, unitrate); 
        if (_records > 0) 
        { 
         return RedirectToAction("Index1", "Shopping", new { UserID = Request.QueryString["UserID"] }); 
        } 
        else 
        { 
         ModelState.AddModelError("","Can Not Update"); 
        } 
       } 
       return View("Index1"); 
      } 
+3

Đây là quá sai trong rất nhiều cách khác nhau. Bạn chủ yếu là phá vỡ tất cả các công ước của MVC, và hy vọng nó vẫn hoạt động. MVC yêu cầu hộp văn bản được đặt tên giống như thuộc tính bạn đang xác thực. Bạn nhận được thông báo xác thực trong Html.TextBox bằng cách đặt tên cho hộp văn bản của bạn là 'Quantity'. –

+0

Tôi đã thử đặt tên chính xác "Số lượng" trong hộp văn bản. Nhưng thông báo xác thực không xảy ra. thay vào đó tôi nhận được một thông báo như thế này. "Từ điển tham số chứa một mục nhập rỗng cho tham số 'Số lượng' của kiểu không nullable 'System.Int32' cho phương thức trong Bộ điều khiển" – kk1076

+0

Có nhiều lý do tại sao có thể, nhưng bạn đã không đưa ra đủ bối cảnh để biết chúng là gì. Số lượng của bạn có trong đối tượng lồng nhau của mô hình chế độ xem của bạn không? Khi bạn sử dụng phương thức TextBoxFor, hãy xem nguồn của trang web khi nó được hiển thị và xem thuộc tính Tên của hộp văn bản. Thay vào đó hãy thử đặt tên nó là "item.Quantity". –

Trả lời

5

bạn có câu trả lời trong câu hỏi của bạn, khi bạn sử dụng

@Html.TextBoxFor(modelItem => item.Quantity) 
@Html.ValidationMessageFor(modelitem => item.Quantity) 

bạn nhận được thông báo lỗi vì xác thực mô hình MVC hoạt động trên các thuộc tính name như @Mystere Man cho biết trong các nhận xét bạn đang bất chấp tất cả các quy ước và quy ước là MVC là gì, hoặc thay đổi tên thuộc tính trong mô hình của bạn hoặc sử dụng nó nó là trong quan điểm nếu bạn muốn tận dụng xác thực mô hình của MVC.


Not entirely relevant but a good read.

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