2012-10-23 14 views
9

Ich verwende eine Update-Aktion, um basierend auf der Eingabe aus der @ Html.Textbox zu aktualisieren.Validierung von @ Html.Textbox in 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" /> 
    } 

und In My Model Klasse

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

Das Problem ist, ich nicht die Validierungsnachricht m bekommen, wenn das Textfeld leer ist. Aber wenn ich @ Html.TextBoxFor

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


ich die Validierungsnachricht bin immer. und meine Update-Aktion funktioniert nicht.
Hier habe ich zwei Möglichkeiten.
1. Wie übergebe ich den Textfeldnamen "Qty" in @ Html.TextboxFor ?? (Oder)
2. Wie die Validierungsnachricht erhalten in @ Html.TextBox() mit @ Html.ValidationMessage()

Irgendwelche Vorschläge ..

EDIT: Meine Aktualisierungsaktion

[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

Diese in vielerlei Hinsicht so nicht stimmt. Sie brechen im Wesentlichen alle Konventionen von MVC und erwarten, dass es immer noch funktioniert. MVC erfordert, dass Textfelder genauso benannt werden wie die Eigenschaft, die Sie validieren. Sie erhalten die Validierungsnachricht in Html.TextBox, indem Sie Ihre Textbox 'Quantity' benennen. –

+0

Ich habe versucht, auch den genauen Namen "Menge" im Textfeld zu geben. Aber Validierungsnachricht tritt nicht auf. stattdessen erhalte ich eine Nachricht wie diese. "Das Parameterwörterbuch enthält einen Nulleintrag für den Parameter 'Menge' des nicht nullbaren Typs 'System.Int32' für die Methode in Controller" – kk1076

+0

Es gibt eine Reihe von Gründen dafür, aber Sie habe nicht genügend Kontext gegeben, um zu wissen, was sie sind. Ist Ihre Menge in einem verschachtelten Objekt Ihres Ansichtsmodells? Wenn Sie die TextBoxFor-Methode verwenden, zeigen Sie die Quelle der Webseite an, wenn sie gerendert wird, und sehen Sie sich das Attribut Name des Textfelds an. Versuchen Sie es stattdessen "item.Quantity" zu nennen. –

Antwort

5

Sie haben die Antwort in Frage, wenn Sie

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

Sie erhalten die Fehlermeldung, da die MVC-Modellvalidierung auf die Attribute name als @Mystere Man in den Kommentaren gesagt, dass Sie alle Konventionen und Konventionen trotzt, was MVC ist, ändern Sie entweder den Namen der Eigenschaft in Ihrem Modell oder verwenden Sie es als Es ist in der Ansicht, wenn Sie die MVC-Modellvalidierung nutzen möchten.


Not entirely relevant but a good read.

Verwandte Themen