2011-01-20 12 views
30

में अतिरिक्त फ़ील्ड का उपयोग कैसे करें मैं एक एएसपी.Net एमवीसी 3 रिमोटएट्रिब्यूट का उपयोग कर रहा हूं ताकि एक ही पैरामीटर वाले एक्शन विधि को रिमोट कॉल भेजा जा सके। अब मैं अतिरिक्त फ़ील्ड गुण का उपयोग कर दूसरे पैरामीटर में पास करना चाहता हूं:एएसपी.नेट एमवीसी 3 में रिमोट वैलिडेशन: एक्शन मेथड

[Remote("IsEmailAvailable", "Users", AdditionalFields = "InitialEmail")] 

जहां IntialEmail दृश्य में एक छिपी हुई फ़ील्ड है। कार्रवाई तो की तरह दिखता है:

public JsonResult IsEmailAvailable(
      string email, 
      string InitialEmail) 
{ 
//etc. 
} 

जब दृश्य प्रदान की गई है, छिपी हुई फ़ील्ड से भर जाता है, लेकिन जब कार्रवाई विधि दूर से शुरू हो रहा है, मूल्य एक खाली स्ट्रिंग है।

मैंने देखा है कि कहीं और केस संवेदनशीलता एक मुद्दा हो सकता है, इसलिए मैंने सुनिश्चित किया है कि एक्शन विधि दोनों पैरामीटर के लिए एक ही मामला है।

कोई अन्य सुझाव? इस अतिरिक्त फ़ील्ड को फील्ड कहा जाता था।

धन्यवाद,

Beaudetious

+0

क्या आप अपने विचार का मार्कअप जोड़ सकते हैं? अतिरिक्त फ़ील्ड को आपके दृश्य में से किसी एक फ़ील्ड से मिलान करने की आवश्यकता है। क्या आपको ईमेल के लिए मूल्य मिलता है लेकिन InitialEmail के लिए एक खाली स्ट्रिंग है? इसकी जांच करने के लिए फ़ायरबग से डीबग करना सहायक होता है और आप अनुरोध को देख सकते हैं जो सर्वर पर वापस भेजा जाता है। इसमें उन फ़ील्ड के लिए क्वेरीस्ट्रिंग होनी चाहिए जिनकी आपकी कार्रवाई की अपेक्षा है। कुछ ऐसा है? ईमेल = blah? InitialEmail = blah ... –

+0

मेरे सवालों में से किसी एक के जवाब ने इसे भी हल किया: http://stackoverflow.com/questions/4696276/client-side-validation-not-firing-for -compareattribute-dataannotation तो मुझे इस प्रश्न का उत्तर कैसे चिह्नित करना चाहिए? – beaudetious

उत्तर

59

अजीब। यह मेरे लिए काम करता है:

मॉडल:

public class MyViewModel 
{ 
    [Required] 
    [Remote("IsEmailAvailable", "Home", AdditionalFields = "InitialEmail")] 
    public string Email { get; set; } 
} 

नियंत्रक:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(new MyViewModel()); 
    } 

    [HttpPost] 
    public ActionResult Index(MyViewModel model) 
    { 
     return View(model); 
    } 

    public ActionResult IsEmailAvailable(string email, string initialEmail) 
    { 
     return Json(false, JsonRequestBehavior.AllowGet); 
    } 
} 

दृश्य:

@model AppName.Models.MyViewModel 
@{ 
    ViewBag.Title = "Home Page"; 
} 
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script> 
@using (Html.BeginForm()) 
{ 
    @Html.TextBoxFor(x => x.Email) 
    @Html.ValidationMessageFor(x => x.Email) 
    <input type="hidden" name="InitialEmail" value="[email protected]" /> 
    <input type="submit" value="OK" /> 
} 

IIRC इस के साथ ASP.NET MVC 3 RC2 में कुछ बग नहीं था रिमोट सत्यापन जो आरटीएम में तय किया गया था।

+6

डारिन: आप और आपका "यह मेरे लिए काम करता है" एक दिन मेरी मौत होगी। ;) – beaudetious

+0

गंभीरता से हालांकि, आउटपुट विंडो में IsEmailAvailable विधि में InitialEmail के मान को प्रिंट करें। आप इसे खाली देखेंगे। मैं रिमोट विधि को आग लगाने में सक्षम हूं, लेकिन अतिरिक्त पैरामीटर का कोई मूल्य नहीं है। – beaudetious

+0

@ बेवकूफ, मैंने किया और यह खाली नहीं था। इसके अलावा मैंने भेजे गए अनुरोध पर फायरबग के साथ देखा। मैं मूल्य भी देख सकता था :-) रुको, मैं आपको अपना नमूना प्रोजेक्ट भेजूंगा। बस मेरी बीयर खत्म करने के लिए। –

2

आपका छुपा क्षेत्र उसी क्षेत्र के अंदर होना चाहिए जैसा कि आप मान्य कर रहे हैं (जैसे कि यह डारिन के उदाहरण में है), अन्यथा छिपी हुई फ़ील्ड का मान सत्यापन क्रिया विधि में पैरामीटर के रूप में नहीं भेजा जाएगा "सार्वजनिक एक्शन रिसैट IsEmailAvailable (स्ट्रिंग ईमेल, स्ट्रिंग प्रारंभिक ईमेल) "

-1

फ़ंक्शन IsEmail उपलब्ध (स्ट्रिंग ईमेल, स्ट्रिंग प्रारंभिक ईमेल) परम ईमेल को ईमेल के रूप में होना चाहिए जो संपत्ति ईमेल के समान ही है।

+0

केस कोई फर्क नहीं पड़ता। एमवीसी ढांचे के मामले में यह असंवेदनशील मामला है। – Fred

संबंधित मुद्दे