2011-10-07 15 views
5

के साथ पोस्ट को समझना इसे सबमिट करने के बाद फ़ॉर्म डेटा कैसे प्राप्त होता है?एमवीसी 3 - एक बटन

<form target="_self" runat="server"> 
    <p> 
    <select id="BLAHBLAH2"> 
     <option>2010</option> 
     <option>2011</option> 
     <option>2012</option> 
     <option>2013</option> 
    </select> 
    <input type="submit" runat="server" value="Change Year" /> 
    </p> 
</form> 

यह नियंत्रक की Index विधि को हिट करता है। लेकिन, Request.Form में कुछ भी नहीं है। क्यूं कर?

दूसरा, मैं

<input type="button" बजाय type=submit उपयोग कर सकते हैं? यही है, onclick के माध्यम से AJAX को पेश किए बिना।

अंत में, मैं नियंत्रक में एक अलग विधि को कैसे सबमिट करूं, उदाहरण के लिए Create?

+3

'runat =" server "' webforms चीजें नहीं है? –

उत्तर

7

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

<form action="/Home/Create" method="post"> 
    <p> 
    <select id="BLAHBLAH2" name="BLAHBLAH2"> 
     <option value="2010">2010</option> 
     <option value="2011">2011</option> 
     <option value="2012">2012</option> 
     <option value="2013">2013</option> 
    </select> 
    <input type="submit" value="Change Year" /> 
    </p> 
</form> 

लेकिन सही तरीका ASP.NET MVC में रूपों उत्पन्न करने के लिए HTML सहायकों उपयोग करने के लिए है: इसके अलावा अपने विकल्प टैग मूल्य गुण जो इंगित करता है कि अगर यह विकल्प चुना जाता है क्या मूल्य सर्वर पर भेज दिया जाएगा होना आवश्यक है। दृश्य इंजन के आधार पर आप सिंटैक्स का उपयोग कर रहे हैं अलग हो सकता है। यहाँ उस्तरा दृश्य इंजन के साथ एक उदाहरण है:

@model MyViewModel 
@using (Html.BeginForm("Create", "Home")) 
{ 
    <p> 
     @Html.DropDownListFor(x => x.SelectedYear, Model.Years) 
     <input type="submit" value="Change Year" /> 
    </p> 
} 

यहाँ आप कुछ विशेष दृश्य के मॉडल के लिए एक जोरदार टाइप किया दृश्य है:

public class MyViewModel 
{ 
    public string SelectedYear { get; set; } 

    public IEnumerable<SelectListItem> Years 
    { 
     get 
     { 
      return Enumerable 
       .Range(2010, 4) 
       .Select(x => new SelectListItem 
       { 
        Value = x.ToString(), 
        Text = x.ToString() 
       }); 
     } 
    } 
} 

जो कुछ नियंत्रक कार्रवाई की आबादी है कि इस दृश्य प्रस्तुत करना होगा:

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

    [HttpPost] 
    public ActionResult Create(MyViewModel model) 
    { 
     ... model.SelectedYear will contain the selected year 
    } 
} 
+0

मैंने रेजर के साथ अपना प्रश्न अपडेट किया। हालांकि मैं आसानी से अनुवाद कर सकता हूं। –

+0

@ पी। ब्रायन.मैकी, मैंने अपने जवाब को रेज़र उदाहरण के साथ अपडेट किया है। –

+0

@DarinDimitrov - मैं आपके विस्तार के स्तर पर धनुष :) – Josh

2

अपने <option> टैग में से कोई भी एक मूल्य है:

... 
<option value="2010">2010</option> 
... 

David द्वारा बताया गया है, runat = "सर्वर" सबसे निश्चित रूप से एक WebForms बात है, तो आप कर सकते हैं 86 कि।

यदि आप अपने नियंत्रक पर किसी भिन्न विधि को सबमिट करना चाहते हैं तो आपको उस विधि के लिए URL निर्दिष्ट करने की आवश्यकता है।

आसान तरीका Html.BeginForm का उपयोग कर:

@using (Html.BeginForm("AnotherAction", "ControllerName")) { 
    <!-- Your magic form here --> 
} 

का उपयोग Url.Action

<form action="@Url.Action("AnotherAction")" method="POST"> 
    <!-- Your magic form here --> 
</form> 
+0

धन्यवाद, कार्य को पूरा करने के लिए वैकल्पिक दृष्टिकोण देखने के लिए अच्छा है। –

0

तुम भी उपयोग कर सकते हैं नियंत्रक में

int Value = Convert.ToInt32(Request["BLAHBLAH2"]); //To retrieve this int value 

.cshtml फ़ाइल में

<select id="IDxxx" name="BLAHBLAH2"> 

// अनुरोध [ ""] का उपयोग नाम "आप अनुरोध एचटीएमएल वस्तु, जिसका के लिए मान प्राप्त होगा।"