2012-10-23 15 views
9

Uso un'azione di aggiornamento da aggiornare in base all'input da @ Html.Textbox.Convalida di @ 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" /> 
    } 

e nella mia classe del modello

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

Il problema è che non sto ottenendo il messaggio di convalida, quando la casella di testo è vuota. Ma quando io uso @ Html.TextBoxFor

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


Sto ottenendo il messaggio di convalida. e la mia azione di aggiornamento non funziona.
Qui ho due opzioni.
1. Come passare il nome della casella di testo "qty" in @ Html.TextboxFor ?? (O)
2. Come ottenere il messaggio di convalida a @ Html.Textbox() utilizzando @ Html.ValidationMessage()

Qualche suggerimento ..

EDIT: mio aggiornamento Azione

[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

Questo è così sbagliato in tanti modi. Stai essenzialmente infrangendo tutte le convenzioni di MVC e ti aspetti che funzioni ancora. MVC richiede che le caselle di testo abbiano lo stesso nome della proprietà che stai convalidando. Ottieni il messaggio di convalida in Html.TextBox nominando la tua casella di testo 'Quantità'. –

+0

Ho provato anche a dare il nome esatto "Quantità" anche nella casella di testo. Ma il messaggio di convalida non si verifica. invece ricevo un messaggio come questo. "Il dizionario dei parametri contiene una voce nulla per il parametro" Quantità "di tipo non nullable" System.Int32 "per il metodo nel controller" – kk1076

+0

Ci sono diversi motivi per cui potrebbe essere, ma tu non hanno dato abbastanza contesto per sapere cosa sono. La tua Quantità è in un oggetto annidato del tuo modello di visualizzazione? Quando si utilizza il metodo TextBoxFor, è possibile visualizzare l'origine della pagina Web al momento del rendering e osservare l'attributo Nome della casella di testo. Prova a chiamarlo "item.Quantity". –

risposta

5

hai la risposta nella tua domanda, quando si utilizza

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

si ottiene il messaggio di errore perché la convalida del modello MVC funziona sugli attributi name come @Mystere Man ha detto che nei commenti si sta sfidando tutte le convenzioni e le convenzioni è ciò che MVC è tutto, o modificare il nome della proprietà nel modello o utilizzarlo come è nella visualizzazione se si desidera sfruttare la convalida del modello MVC.


Not entirely relevant but a good read.

Problemi correlati