Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Validation of @Html.Textbox in MVC4

I use an update action to update based on the input from the @Html.Textbox.

@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" />
   }

and In My Model class

        [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; }

The problem is I m not getting the validation message when the textbox is empty. But when I use @Html.TextBoxFor

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


I am getting the validation message. and my update action is not working.
Here I have two options.
1. How to pass the textbox name "qty" in @Html.TextboxFor ?? (or)
2. How to get the validation message in @Html.Textbox() using @Html.ValidationMessage()

Any suggestions ..

EDIT : My Update Action

[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");
            }
like image 416
kk1076 Avatar asked Oct 23 '12 05:10

kk1076


1 Answers

you have the answer in your question, when you use

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

you get the error message becasue the MVC model validation works on the name attributes as @Mystere Man said in the comments you are defying all the conventions and conventions is what MVC is all about, either change the property name in your model or use it as it is in the view if you want to leverage the MVC's model validation.


Not entirely relevant but a good read.

like image 50
Rafay Avatar answered Sep 19 '22 15:09

Rafay