2011-01-18 12 views
8

मैंने एमवीसी मेंएएसपी.नेट एमवीसी में बटन इवेंट

<%using (Html.BeginForm()) 
{ %> 
    <%=LabelHelpers.Label("firstname", "FirstName:")%> 
    <br/> 
    <%=Html.TextBox("firstname")%> 
    <br/><br/> 
    <%=LabelHelpers.Label("lastname", "Lastname:")%> 
    <br/> 
    <%=Html.TextBox("lastname")%> 
    <br/><br/> 
    <input type="Button" value="Register"/> 
<%} %> 

जैसे दृश्य पृष्ठ बनाया है यहां मैं बटनक्लिक ईवेंट लिखना चाहता हूं ... मुझे कैसे और कहां लिखना चाहिए?

उत्तर

12

आपका इनपुट button प्रकार है - ये अतिरिक्त क्लाइंट साइड कोड के बिना कुछ भी नहीं करते हैं।

यदि आप सर्वर पर 'ईवेंट' को उसी तरह से संभालना चाहते हैं, तो आप एएसपी.नेट में होंगे, तो आपको इसे सबमिट बटन में बदलना चाहिए। अपने नियंत्रक मान लिया जाये कि 'खाता' कहा जाता है और अपनी कार्रवाई 'रजिस्टर' कहा जाता है अपने वर्तमान कोड इस तरह कुछ दिखेगा:

public ViewResult Register() 
{ 
    return View(); 
} 

आप शुरू करना चाहते हैं को देखने के लिए एक मॉडल पारित करके:

public ViewResult Register() 
{ 
    var registerModel = new RegisterModel(); 

    return View(registerModel); 
} 

आपका वर्तमान दृश्य ढीले टाइप किए गए इनपुट का उपयोग कर रहा है। चूंकि आप इसे एक मॉडल पास कर रहे हैं, इसलिए आप दृढ़ता से टाइप किए गए विचारों का उपयोग कर सकते हैं। आपका मॉडल कुछ इस तरह दिखना चाहिए:

public class RegisterMode 
{ 
    public string Firstname { get; set; } 
    public string Surname { get; set; } 
} 

दृढ़ता से टाइप किया दृश्यों का उपयोग करने के लिए, अपने दृश्य बदलने के इस तरह देखने के लिए:

<%using (Html.BeginForm()) 
{ %> 
    <%=Html.LabelFor(x => x.Firstname)%> 
    <br/> 
    <%=Html.TextBoxFor(x => x.Firstname)%> 
    <br/><br/> 
    <%=Html.LabelFor(x => x.Surname)%> 
    <br/> 
    <%=Html.TextBoxFor(x => x.Surname)%> 
    <br/><br/> 
    <input type="submit" value="Register"/> 
<%} %> 

हम क्या किया है लेबल और पाठ का निर्माण करने के दृश्य बताया जाता है अपने रजिस्टर मॉडल प्रकार के लिए बक्से। जब आप नियंत्रक को फॉर्म पोस्ट करते हैं तो यह मॉडल मानों को स्वचालित रूप से मैप करने की अनुमति देगा।

हम एक ही नाम के साथ नियंत्रक के लिए एक नया कार्रवाई को जोड़ने के लिए, की जरूरत है पद को स्वीकार करते हैं, लेकिन प्रकार RegisterModel के पैरामीटर को स्वीकार: करने के लिए

public ActionResult Register(RegisterModel model) 
{ 
    // do something with the model, such as inserting it into the database. 
    // model.Firstname will contain the value of the firstname textbox 
    // model.Surname will contain the value of the surnaem textbox 

    return RedirectToAction("Success"); 
} 

एक आखिरी बात, यह सुरक्षित है, तरीकों वे स्वीकार करते हैं नियंत्रित करने के लिए अपने नियंत्रक कार्रवाई करने के [HttpGet] और [HttpPost] विशेषताओं को जोड़ने के लिए है:

[HttpGet] 
public ViewResult Register() 

और

[HttpPost] 
public ActionResult Register(RegisterModel model) 

मेरा सुझाव है कि आप http://www.asp.net/mvc पर एमवीसी पर पढ़ लें और पेशेवर एमवीसी में एनर्ड डिनर ट्यूटोरियल अध्याय पढ़ें (पीडीएफ प्रारूप में मुफ्त ऑनलाइन उपलब्ध)।

1

प्रश्न के शामिल होने से, यह अधिक ठोस

मैं एक रूप है बनाना चाहते, प्रपत्र पहले से ही एक सबमिट बटन है, लेकिन मैं एक और बटन के लिए एक अतिरिक्त कार्रवाई के लिए बाध्य करने की जरूरत है। हाँ, मुझे पता है कि एमवीसी घटनाओं के कारणों का समर्थन नहीं करता है HTML फॉर्म उनका समर्थन नहीं करता है।

तो मैं जिस समाधान में आया हूं वह फ़ॉर्म के अंदर छिपे हुए इनपुट को बनाने और प्रत्येक पर 'ऑनक्लिक' ईवेंट (jquery 'live' विधि) बांधना है ... ओह, क्या है?

एचटीएमएल:

<input type="hidden" id="SenderControlID" name="SenderControlID" value="-1" /> 
<input type="hidden" id="SenderControlValue" name="SenderControlValue" value="-1" /> 

js: यहाँ कोड है

if ($('#SenderControlID')[0]) { 
     $('input[type="submit"], input[type="button"], input[type="checkbox"], input[type="radio"]').live('click', function() { 
      $('#SenderControlID').val($(this).attr('name')); 
      $('#SenderControlValue').val($(this).val()); 
     }); 
    } 

लेकिन शायद वहाँ अधिक सुरुचिपूर्ण समाधान है?

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