तीन तरीके हैं जिनके द्वारा आप उपरोक्त मुद्दे को हल कर सकते हैं
- HTML तरीका
- जेकरी रास्ता
- "ActionNameSelectorAttribute" तरीका
नीचे एक वीडियो है जो प्रदर्शनकारी तरीके से तीनों दृष्टिकोणों को संक्षेप में प्रस्तुत करता है।
https://www.facebook.com/shivprasad.koirala/videos/vb.100002224977742/809335512483940
HTML तरीका: -
HTML तरीके से हमें दो फॉर्म बनाने और प्रत्येक फॉर्म के अंदर "सबमिट" बटन लगाने की आवश्यकता है। और हर फॉर्म की कार्रवाई अलग / संबंधित कार्यों को इंगित करेगी। आप नीचे दिए गए कोड को देख सकते हैं कि पहला फॉर्म "Action1" पर पोस्ट हो रहा है और दूसरा फॉर्म "Action2" पर पोस्ट होगा, जिसके आधार पर "सबमिट" बटन पर क्लिक किया गया है।
<form action="Action1" method=post>
<input type=”submit” name=”Submit1”/>
</form>
<form action="Action2" method=post>
<input type=”submit” name=”Submit2”>
</form>
अजाक्स रास्ता: -
यदि आप एक अजाक्स प्रेमी हैं तो यह दूसरा विकल्प आपको अधिक उत्साहित करेगा। अजाक्स तरीके से हम दो अलग-अलग फ़ंक्शन "फन 1" और "फन 1" बना सकते हैं, नीचे दिए गए कोड को देखें। ये कार्य JQUERY या किसी अन्य ढांचे का उपयोग करके अजाक्स कॉल करेंगे। इनमें से प्रत्येक फ़ंक्शन "सबमिट" बटन के "ऑनक्लिक" इवेंट के साथ बांधा गया है। इनमें से प्रत्येक फ़ंक्शन संबंधित कार्रवाई नामों को कॉल करता है।
<Script language="javascript">
function Fun1()
{
$.post(“/Action1”,null,CallBack1);
}
function Fun2()
{
$.post(“/Action2”,null,CallBack2);
}
</Script>
<form action="/Action1" method=post>
<input type=submit name=sub1 onclick=”Fun2()”/>
</form>
<form action="/Action2" method=post>
<input type=submit name=sub2 onclick=”Fun1()”/>
</form>
"ActionNameSelectorAttribute" का उपयोग करना: -
यह एक बेहतरीन और साफ विकल्प है। "ActionNameSelectorAttribute" एक साधारण विशेषता वर्ग है जहाँ हम निर्णय लेने के तर्क लिख सकते हैं जो यह तय करेगा कि किस क्रिया को निष्पादित किया जा सकता है।
इसलिए पहली बात HTML में हमें सर्वर पर उन्हें पहचानने के लिए उचित नाम प्रस्तुत करने के लिए बटन लगाने की आवश्यकता है।
आप देख सकते हैं कि हमने बटन नामों में "सेव" और "डिलीट" कर दिया है। इसके अलावा, आप उस कार्रवाई को देख सकते हैं जिसे हमने केवल "ग्राहक" नाम दिया है, न कि किसी विशेष क्रिया नाम पर। हम उम्मीद करते हैं कि कार्रवाई का नाम "ActionNameSelectorAttribute" द्वारा तय किया जाएगा।
<form action=”Customer” method=post>
<input type=submit value="Save" name="Save" /> <br />
<input type=submit value="Delete" name="Delete"/>
</form>
इसलिए जब सबमिट बटन पर क्लिक किया जाता है, तो यह पहले "ActionNameSelector" विशेषता को हिट करता है और फिर यह निर्भर करता है कि कौन सा सबमिट निकाल दिया गया है जो उचित कार्रवाई को आमंत्रित करता है।
तो पहला कदम एक वर्ग बनाना है जो "ActionNameSelectorAttribute" वर्ग से विरासत में मिला है। इस वर्ग में हमने एक सरल संपत्ति "नाम" बनाई है।
हमें "IsValidName" फ़ंक्शन को ओवरराइड करने की भी आवश्यकता है जो सही या वापस लौटाता है। यह फ़ंक्शन वह है जहां हम तर्क लिखते हैं कि क्या किसी कार्रवाई को निष्पादित करना है या नहीं। इसलिए यदि यह फ़ंक्शन सही है, तो कार्रवाई निष्पादित की जाती है या यह नहीं है।
public class SubmitButtonSelector : ActionNameSelectorAttribute
{
public string Name { get; set; }
public override bool IsValidName(ControllerContext controllerContext, string actionName, System.Reflection.MethodInfo methodInfo)
{
// Try to find out if the name exists in the data sent from form
var value = controllerContext.Controller.ValueProvider.GetValue(Name);
if (value != null)
{
return true;
}
return false;
}
}
उपरोक्त फ़ंक्शन का मुख्य दिल नीचे दिए गए कोड में है। "ValueProvider" संग्रह में फॉर्म से पोस्ट किए गए सभी डेटा हैं। इसलिए यह पहली बार "नाम" मान को देखता है और यदि HTTP अनुरोध में पाया गया है तो यह सही है या फिर यह गलत है।
var value = controllerContext.Controller.ValueProvider.GetValue(Name);
if (value != null)
{
return true;
}
return false;
इस विशेषता वर्ग को फिर संबंधित कार्रवाई पर सजाया जा सकता है और संबंधित "नाम" मूल्य प्रदान किया जा सकता है। इसलिए यदि सबमिट इस कार्रवाई को रोक रहा है और यदि HTML नाम का बटन मैच के नाम से मेल खाता है, तो कार्रवाई को आगे निष्पादित करता है या फिर ऐसा नहीं करता है।
public class CustomerController : Controller
{
[SubmitButtonSelector(Name="Save")]
public ActionResult Save()
{
return Content("Save Called");
}
[SubmitButtonSelector(Name = "Delete")]
public ActionResult Delete()
{
return Content("Delete Called");
}
}