2012-10-23 28 views
9

में @ एचटीएमएल। टेक्स्टबॉक्स का सत्यापन @ HTMLमैं @ Html.Textbox से इनपुट के आधार पर अपडेट करने के लिए एक अद्यतन कार्रवाई का उपयोग करता हूं।एमवीसी 4

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

और मेरे मॉडल वर्ग

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

समस्या है जब टेक्स्ट बॉक्स खाली है मैं सत्यापन संदेश नहीं मिल रहा हूँ है। लेकिन जब मैं @ Html.TextBoxFor

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


मैं सत्यापन संदेश प्राप्त हो रहा उपयोग करें। और मेरी अद्यतन कार्रवाई काम नहीं कर रही है।
यहां मेरे पास दो विकल्प हैं।
1. @ HTML में टेक्स्टबॉक्स नाम "qty" को कैसे पास करें। टेक्स्टबॉक्स के लिए ?? (या)
2. मान्यता संदेश @ Html.Textbox में() प्राप्त करने के लिए कैसे @ Html.ValidationMessage()

कोई सुझाव ..

संपादित करें का उपयोग कर: मेरे अद्यतन कार्रवाई

[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

यह कई मायनों में बहुत गलत है। आप अनिवार्य रूप से सभी एमवीसी के सम्मेलनों को तोड़ रहे हैं, और उम्मीद कर रहे हैं कि यह अभी भी कार्य करे। एमवीसी को टेक्स्टबॉक्स को उस संपत्ति के समान नाम दिया जाना चाहिए जिसे आप मान्य कर रहे हैं। आपको अपने टेक्स्टबॉक्स 'मात्रा' नामकरण करके HTML.TextBox में सत्यापन संदेश प्राप्त होता है। –

+0

मैंने टेक्स्टबॉक्स में भी सटीक नाम "मात्रा" देने का प्रयास किया। लेकिन सत्यापन संदेश नहीं होता है। इसके बजाय मुझे इस तरह का एक संदेश मिलता है। "पैरामीटर डिक्शनरी में नियंत्रक में विधि के लिए गैर-शून्य प्रकार 'System.Int32' के पैरामीटर 'मात्रा' के लिए एक शून्य प्रविष्टि है" – kk1076

+0

ऐसा होने के कई कारण हैं, लेकिन आप यह जानने के लिए पर्याप्त संदर्भ नहीं दिया है कि वे क्या हैं। क्या आपकी मात्रा आपके दृश्य मॉडल की घोंसला वाली वस्तु में है? जब आप TextBoxFor विधि का उपयोग करते हैं, तो वेब पेज के स्रोत को प्रस्तुत करते समय देखें और टेक्स्टबॉक्स के नाम विशेषता को देखें। इसके बजाए इसे "item.Quantity" नाम देने का प्रयास करें। –

उत्तर

5

आप अपने प्रश्न में उत्तर है, जब आप का उपयोग

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

आपको त्रुटि संदेश मिलता है क्योंकि एमवीसी मॉडल सत्यापन name गुणों पर काम करता है @Mystere Man ने टिप्पणियों में कहा है कि आप सभी सम्मेलनों और सम्मेलनों को अस्वीकार कर रहे हैं, एमवीसी क्या है, या तो आपके मॉडल में संपत्ति का नाम बदल दें या इसे इस्तेमाल करें यह विचार में है कि क्या आप एमवीसी के मॉडल सत्यापन का लाभ उठाना चाहते हैं।


Not entirely relevant but a good read.