एमवीसी 3 में सरल DropDownList

मेरे पहले एमवीसी 3 ऐप पर काम करना। मेरे पास एक साधारण दृश्य है जिसमें 2 ऑब्जेक्ट्स हैं (ऑब्जेक्ट ए, ऑब्जेक्ट बी)। ऑब्जेक्ट बी वैकल्पिक है। मैंने दोनों ऑब्जेक्ट्स के साथ एक मॉडल बनाया है और नियंत्रक को दृश्य में डेटा को आगे और आगे गुजरने के ठीक काम कर रहा है।

I'm trying to put in a simple DropDownList for the user to decide whether they want to enter data for object B. The dropdown list is simple - two values "Yes" and "No".
Ex: Continue with Part "B"?
[Yes]
[No]

दृश्य पर, उपयोगकर्ता ऑब्जेक्ट ए के सभी फॉर्म आइटम्स को भरता है। फिर, उनके पास ऑब्जेक्ट बी के आइटम भरने का विकल्प होता है। मैं चाहता हूं कि वे "हां" चुनें, अगर वे ऐसा करना चाहते हैं (मैं हूं उस समय के अधिक पृष्ठ दिखाने के लिए jQuery का उपयोग करना)।

मेरा प्रश्न: मैं एक साधारण ड्रॉपडाउन सूची (या यहां तक ​​कि एक बुनियादी HTML इनपुट प्रकार = "चयन करें" ...) कैसे बना सकता हूं कि मैं फ़ॉर्म जमा करने के बाद नियंत्रक में पहुंच सकता हूं?

In my Controller, I want to do the following:
* Do stuff for object A
* Check to see if they selected Yes
* Do stuff for object B

क्या हां/नहीं ड्रॉपडाउन के रूप में सरल कुछ मॉडल में जाना है? यह किसी भी चीज़ पर टाइप नहीं किया गया - यह सिर्फ दृश्य में उपयोगकर्ता द्वारा किया गया एक निर्णय है। मुझे पता है कि ऐसा करने का एक आसान तरीका होना चाहिए (व्यूबैग?) लेकिन मैं नया हूं और स्पष्ट रूप से खो गया हूं।

टीएल; डीआर - मैं एक दृश्य पर सरल ड्रॉपडाउनलिस्ट के रूप में कैसे बना सकता हूं जिसे मैं नियंत्रक में एक्सेस कर सकता हूं?

0
जोड़ा संपादित
विचारों: 1
ठीक है - मैं Request.Form ["ddlChoice"] का उपयोग कर सकता हूं; नियंत्रक में और वह काम करेगा। क्या यह करने का सबसे अच्छा तरीका है?
जोड़ा लेखक Mike Smith, स्रोत
कृपया नीचे मेरा जवाब देखें, मुझे लगता है कि अधिक कोड ब्लोट है और अगर आप दृढ़ता से टाइप की गई कक्षा का उपयोग करने के बजाय Request.Form विशेषताओं का उपयोग करते हैं तो त्रुटि के लिए अधिक प्रवण होता है। यदि आपको लगता है कि नीचे दिया गया जवाब कृपया उत्तर के रूप में चिह्नित करने में मदद करता है, तो एक अच्छा है!
जोड़ा लेखक likestoski, स्रोत

2 उत्तर

आपके ऑब्जेक्ट के लिए HTTPPOST में वापस देखने से मान प्राप्त करने के लिए अंगूठे का नियम इनपुट नियंत्रण आईडी और नाम गुणों को मॉडल गुण नाम के समान नाम देना है। ऐसा करने का एक आसान तरीका है एचटीएमएल हेल्पर्स का उपयोग करना।

    public class Model
    {
        public Model()
        {
            List options = new List();
            options.Add(new SelectListItem { Value = true.ToString(), Text = "yes" });
            options.Add(new SelectListItem { Value = false.ToString(), Text = "no" });
            ContinueOptions = options;
        }
        public bool Continue { get; set; }
        public IEnumerable ContinueOptions { get; set; }
    }

आपके दृश्य में:

@Html.DropDownListFor(m => Model.Continue, Model.ContinueOptions)

आपके नियंत्रक में:

[HttpPost]
public ActionResult Edit(Model model)
{
    bool continueOn = model.Continue;   

}
2
जोड़ा

हां आपकी ड्रॉप डाउन मॉडल का हिस्सा होना चाहिए, अन्यथा नियंत्रक के पास उपयोगकर्ता से जवाब नहीं होगा यह देखने के लिए जांचें कि क्या उन्होंने हां चुना है।

public SomeViewModel
{
  public ObjectA A { get; set; }
  public ObjectB B { get; set; }
  public bool? IsBSelected { get; set; }
}

मैं आमतौर पर bool? का उपयोग करता हूं क्योंकि मुझे यह जानना अच्छा लगता है कि उपयोगकर्ता ने या दूसरे पर चुना है, लेकिन bool का उपयोग करना भी ठीक होगा।

0
जोड़ा