2010-03-11 12 views
5

के अंदर दो सबमिट बटन का उपयोग करके मेरे पास मेरे एएसपीएनटी एमवीसी (सी #) एप्लिकेशन में दो सबमिट बटन के साथ एक फॉर्म है। जब मैं Google Chrome में कोई सबमिट बटन क्लिक करता हूं, तो डिफ़ॉल्ट रूप से सबमिट बटन का मान पहला सबमिट बटन का मान होता है।एकल फॉर्म

<input type="submit" value="Send" name="SendEmail" /> 
<input type="submit" value="Save As Draft" name="SendEmail" /> 
<input type="button" value="Cancel" /> 

जब मैं Save As Draft बटन क्लिक करें, नियंत्रक की कार्रवाई में, यह हो जाता है SendEmail के लिए मूल्य के रूप में "भेजें":

यहाँ एचटीएमएल है।

public ActionResult SendEmail(string SendEmail, FormCollection form) 
{ 
     if(SendEmail == "Send") 
     { 
      //Send Email 
     } 
     else 
     { 
      //Save as draft 
     } 
     return RedirectToAction("SendEmailSuccess"); 
} 

जब मैं FormCollection से मूल्य मिलता है, यह पता चलता है "भेजें":

यहाँ कार्रवाई है। यानी form["SendEmail"]Send

क्लिक किए गए सबमिट बटन का वास्तविक मूल्य प्राप्त करने के लिए मुझे क्या समस्या या काम करना पड़ सकता है?

+0

आपका कोड ठीक लग रहा है, कि तकनीक काम करना चाहिए। यह देखने के लिए कि HTTP पर वास्तव में क्या भेजा जा रहा है, HTTP पोस्ट की जांच करने का प्रयास करें। – DavGarcia

+0

यह केवल Google क्रोम में होता है, लेकिन आईई और फ़ायरफ़ॉक्स में, यह अच्छा काम करता है। – Prasad

+0

क्रोम के साथ क्या है ?! – Ted

उत्तर

-2

काम के आसपास: बजाय के रूप प्रविष्ट करने के लिए जावास्क्रिप्ट का उपयोग बटन

5

प्रस्तुत बजाय इस प्रयास करें:

<input type="submit" value="Send" name="send" /> 
<input type="submit" value="Save As Draft" name="save" /> 

और:

public ActionResult SendEmail(string send, FormCollection form) 
{ 
    if (!string.IsNullOrEmpty(send)) 
    { 
     // the Send button has been clicked 
    } 
    else 
    { 
     // the Save As Draft button has been clicked 
    } 
} 
+0

यह Google क्रोम में किसी भी बटन पर क्लिक करते समय "भेजें" मान लौटा रहा है, लेकिन आईई में, "ड्राफ्ट के रूप में सहेजें" पर क्लिक करते समय यह शून्य हो जाता है। समस्या केवल तभी होती है जब Google क्रोम – Prasad

+0

का उपयोग कर रहे हों क्या आप मेरी पोस्ट को ध्यान से पढ़ रहे हैं? क्या आपने बटन के नाम और कार्रवाई में पारित पैरामीटर का नाम देखा है? –

+0

हाँ मैंने आपके उत्तर के अनुसार अपना कोड बदल दिया, लेकिन समस्या एक ही है। मैं नहीं जानता कि Google क्रोम के साथ अजीब क्या है। – Prasad

7

दिखाएँ इस पेज।

ASP.NET MVC – Multiple buttons in the same form - David Findley's Blog

ActionMethodSelectorAttribute वर्ग के वारिस बनाएँ।

+0

यह लिंक यह भी दिखाता है कि एक ActionMethodSelectorAttribute (जो मुझे चाहिए!) का उपयोग किए बिना एकाधिक बटन कैसे प्रबंधित करें! धन्यवाद! – Andrew

1

छिपे हुए एचटीएमएल तत्व आपके फॉर्म के साथ जमा किए जाएंगे, ताकि आप एक छुपा तत्व जोड़ सकें और सबमिशन से पहले बटन क्लिक पर इसे संशोधित कर सकें। फॉर्म जमा करने के साथ जारी रखने के लिए सच वापसी करें।

@Html.Hidden("sendemail", true) 
<input type="submit" value="Send" 
     onclick="$('#sendemail').val(true); return true" /> 
<input type="submit" value="Save As Draft" 
     onclick="$('#sendemail').val(false); return true;" /> 

अब आप अपने फॉर्म संग्रह से मूल्य को खींच सकते हैं।

public ActionResult SendEmail(FormCollection form) 
{ 
    if(Boolean.Parse(form["sendemail"])) 
    { 
     //Send Email 
    } 
    else 
    { 
     //Save as draft 
    } 
    return RedirectToAction("SendEmailSuccess"); 
} 

सीधे हालांकि FormCollection का उपयोग कर के बजाय, सबसे अच्छा अभ्यास है कि निर्दिष्ट प्रॉपर्टी वाला एक दृश्य मॉडल बनाने के लिए किया जाएगा।

देखें मॉडल

public class FooViewModel 
{ 
    public bool SendEmail { get; set; } 
    // other stuff 
} 

एचटीएमएल

// MVC sets a hidden input element's id attribute to the property name, 
// so it's easily selectable with javascript 
@Html.HiddenFor(m => m.SendEmail) 

// a boolean HTML input can be modified by setting its value to 
// 'true' or 'false' 
<input type="submit" value="Send" 
     onclick="$('#SendEmail').val(true); return true" /> 
<input type="submit" value="Save As Draft" 
     onclick="$('#SendEmail').val(false); return true;" /> 

नियंत्रक कार्रवाई

public ActionResult SendEmail(FooViewModel model) 
{ 
    if(model.SendEmail) 
    { 
     //Send Email 
    } 
    else 
    { 
     //Save as draft 
    } 
    return RedirectToAction("SendEmailSuccess"); 
}