मैं एमवीसी के लिए बिल्कुल नया हूं और बस कुछ हासिल करने की कोशिश कर रहा हूं जो मुझे लगता है कि हासिल करने के लिए बहुत जटिल नहीं होना चाहिए। बस यह जानना चाहते हैं कि इसके लिए सबसे अच्छा तरीका क्या है। मेरे पास एक ईवेंट-RSVP एप्लिकेशन (NerdDinner प्रकार) है जहां आप ईवेंट का विवरण देखने के लिए जाते हैं और फिर एक AJAX लिंक पर क्लिक करते हैं जो आपको ईवेंट के लिए RSVP करेगा।
<%
if (Model.HasRSVP(Context.User.Identity.Name))
{
%>
<p>
You are registered for this event!
<%:
Ajax.ActionLink("Click here if you can't make it!", "CancelRegistration", "RSVP", new { id = Model.RSVPs.FirstOrDefault(r => r.AttendeeName.ToLower() == User.Identity.Name.ToLower()).RSVPID }, new AjaxOptions { UpdateTargetId = "QuickRegister"})
%>
</p>
<%
}
else
{
%>
<p>
<%:
Ajax.ActionLink("RSVP for this event", "Register", "RSVP", new { id=Model.EventID }, new AjaxOptions { UpdateTargetId="QuickRegister" }) %>
</p>
<%
}
%>
अब इन दो लिंक के अनुरूप, RSVP नियंत्रक में मेरे कार्य इस तरह दिखते हैं।
[Authorize, HttpPost]
public ActionResult Register(int id)
{
Event event = eventRepository.GetEvent(id);
if (event == null)
return Content("Event not found");
if (!event.IsUserRegistered(User.Identity.Name))
{
RSVP rsvp = new RSVP();
rsvp.AttendeeName = User.Identity.Name;
event.RSVPs.Add(rsvp);
eventRepository.Save();
}
return Content("Thanks, you are registered.");
}
[Authorize, HttpPost]
public ActionResult CancelRegistration(int id)
{
RSVP rsvp = eventRepository.GetRSVP(id);
if (rsvp == null)
return Content("RSVP not found");
if (rsvp.Event.IsUserRegistered(User.Identity.Name))
{
eventRepository.DeleteRSVP(rsvp);
eventRepository.Save();
}
return Content("Sorry, we won't be seeing you there!");
}
ये दोनों बिना किसी समस्या के काम करते दिखते हैं। अब मैं इन दोनों में से किसी एक को करके इसे थोड़ा सा प्रशंसनीय बनाना चाहता हूं:
1) नियंत्रक से एक AJAX लिंक लौटाएं ताकि जब आप पंजीकरण करें, तो आपको पृष्ठ को ताज़ा किए बिना आपको दिखाया गया रद्द पंजीकरण लिंक मिल जाए।
2) किसी भी तरह जब नियंत्रक विधि निष्पादन समाप्त हो जाती है तो दृश्य प्रतिपादन रीफ्रेश हो जाता है, इसलिए मेरे प्रश्न में पहला कोड ब्लॉक किसी भी AJAX लिंक के क्लिक के बाद निष्पादित हो जाता है। तो रजिस्टर पर क्लिक करने से आप रजिस्टर हो जाएंगे और आपको कैंसिल लिंक दिखाई देगा और कैंसिल पर क्लिक करने से आपका रजिस्ट्रेशन रद्द हो जाएगा और आपको रजिस्टर लिंक दिखाई देगा।
किसी भी तरह की सहायता का स्वागत किया जाएगा। धन्यवाद।
2 जवाब
आप jQuery शो का उपयोग करके इन लिंक को छुपा सकते हैं।
मैं कभी भी अजाक्स का उपयोग नहीं करता हूं। एक्शनलिंक, मैं अपने AJAX को सहायक के बिना करता हूं लेकिन मुझे लगता है कि इसे इस तरह दिखना चाहिए:
Ajax.ActionLink("Click here if you can't make it!", "CancelRegistration", "RSVP", new { id = Model.RSVPs.FirstOrDefault(r => r.AttendeeName.ToLower() == User.Identity.Name.ToLower()).RSVPID }, new AjaxOptions { UpdateTargetId = "QuickRegister", OnSuccess = "ShowHideLinks" }, new { id = "cancel-link", @style = "display:none"})
Ajax.ActionLink("RSVP for this event", "Register", "RSVP", new { id=Model.EventID }, new AjaxOptions { UpdateTargetId="QuickRegister", OnSuccess = "ShowHideLinks" }, new { id = "register-link"})
और कुछ जावास्क्रिप्ट/jQuery वर्तमान प्रदर्शन लिंक को प्रारंभ करने के लिए:
function ShowHideLinks() {
$('#register-link').toggle();
$('#cancel-link').toggle();
}
<%: if(Model.HasRSVP(Context.User.Identity.Name)) { %>
ShowHideLinks();
<%: } %>
उममीद है कि इससे मदद मिलेगी!
आप jQuery का उपयोग करके लिंक सेट कर सकते हैं। मैं देखता हूं कि आप दोनों क्रिया विधियों से सामग्री पास कर रहे हैं ... आप इन क्रियाओं को निष्पादित करने के लिए jQuery में $.post() का उपयोग कर सकते हैं और सफलता ईवेंट हैंडलर में लौटाई गई सामग्री की तुलना करें (आपको कुछ ऐसा भेजने की आवश्यकता होगी जो तुलना करना अधिक आसान हो वर्तमान तारों की तुलना में) और लिंक को उचित रूप से सेट करें।
संबंधित सवाल
नए सवाल
asp.net
ASP.NET एक Microsoft वेब अनुप्रयोग विकास ढांचा है जो प्रोग्रामर को गतिशील वेब साइटों, वेब अनुप्रयोगों और वेब सेवाओं के निर्माण की अनुमति देता है। प्रोजेक्ट प्रकार टैग के साथ संयोजन के रूप में इस टैग का उपयोग करना उपयोगी है। [asp.net-mvc], [asp.net-webforms], या [asp.net-web-api]। ASP.NET Core के बारे में प्रश्नों के लिए इस टैग का उपयोग न करें - इसके बजाय [asp.net-core] का उपयोग करें।