2013-01-21 9 views
6

में ऑब्जेक्ट्स की सूची के माध्यम से पुनरावृत्ति कैसे करें, इसलिए मुझे छात्रों के नामों को छात्र ऑब्जेक्ट की सूची में लाने की आवश्यकता है जो दृश्य के मॉडल में हैं, फिर उन्हें $ .post के माध्यम से सर्वर पर भेजें मैंने इसे समझ लिया है लेकिन मैं यह नहीं समझ सकता कि वस्तुओं की सूची के माध्यम से कैसे पुनरावृत्ति करना है।जावास्क्रिप्ट: मॉडल

//Student object 
public class Student 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    //Like a bunch of other attributes here 
} 

यह ध्यान में रखते हुए मॉडल है: मूल रूप से मैं इस राशि

//StudentSearchResult ViewModel 

public class StudentSearchResult { 

    public IEnumerable<Student> { get; set;} 
} 

सबसे पहले मैं सिर्फ छात्र सूची वस्तु भेजने के रूप में, लेकिन यह एक अच्छा विचार नहीं हो सकता है, हालांकि यह बहुत अधिक विशेषताओं के साथ बंडल किया गया है (जब मैंने मॉडल भेजने की कोशिश की तो मुझे यह 'सर्कुलर' त्रुटि मिली) और मुझे केवल $ .post विधि का उपयोग कर नियंत्रक को समेकित फर्स्टनाम और लास्टनाम भेजने की ज़रूरत है। मैं इन तरह बातें करने की कोशिश की:

var names = [] 
var length = "@Model.StudentSearchResult.count()"; 
for (int i = 0; i < length; i++) 
{ 
    names[] = "@Model.StudentSearchResult[i].Name + @Model.StudentSearchResult[i].LastName" 
} 
//$.post function here that calls the controller and send the concatenated names of each student in studentsearchresult. 

लेकिन मैं मेरे विचार मॉडल में वस्तुओं की सूची के माध्यम से कोई त्रुटि मिलती था कि "मैं" नहीं मौजूद है तो, मैं कैसे जावास्क्रिप्ट में पुनरावृति कर सकते है, गुण पहुँच सकते हैं और उन्हें संयोजित करें और फिर उन्हें स्ट्रिंग की सरणी पर स्टोर करें ताकि मैं इसे नियंत्रक को भेज सकूं? मुझे लगता है कि नियंत्रक इस

[HttpPost] 
public ActionResult StudentSearchResult(/*other stuff I send here, */ string[] studentNames){ 
    //stuff here 

    return View(); 
} 

धन्यवाद जैसा दिखता है!

+0

निश्चित रूप से 'var length = "@ model.StudentSearchResult.count()";' कुछ में 'var length = "5";' क्लाइंट पर जा रहा है? और इस तरह एक स्ट्रिंग होने के नाते? हां, जावास्क्रिप्ट को कम से कम टाइप किया गया है और इसलिए यह अधिकतर काम करेगा, लेकिन ... –

+0

आसान हिस्सा है, मैं क्या नहीं कर सकता दृश्य मॉडल में ऑब्जेक्ट्स की सूची के सदस्यों तक पहुंच सकता है और उन्हें एक सरणी – Ricardo

उत्तर

21

आपके पास कुछ अमान्य जावास्क्रिप्ट है।

आपके विचार मॉडल ताकि आप है एक संकलन सी # कोड (अगर एक संपत्ति नाम अनदेखा कर रहे थे) फिक्सिंग से

पहले शुरू:

public class StudentSearchResult 
{ 
    public IEnumerable<Student> Students { get; set;} 
} 

फिर अपने नियंत्रक कार्यों संभालने ग्राहक के लिए एक JSON परिणाम भेजता है (यह सुनिश्चित करता है उस दृश्य मॉडल ठीक से JSON एन्कोड किया गया है और application/json प्रतिक्रिया सामग्री प्रकार हैडर भेज दिया जाता है कि):

[HttpPost] 
public ActionResult StudentSearchResult(/*other stuff I send here, */ string[] studentNames) 
{ 
    StudentSearchResult model = ... //stuff here to populate your view model 
    return Json(model); 
} 

आप आसानी से ग्राहक $.each() समारोह का उपयोग करने पर पुनरावृति सकता है:

012,
var studentNames = ['name1', 'name2']; 
$.post('/Students/StudentSearchResult', studentNames, function(result) { 
    var students = result.Students; 
    $.each(students, function() { 
     alert('FirstName: ' + this.FirstName + ' LastName:' + this.LastName); 
    }); 
}); 

या यहां तक ​​कि एक सादे ol 'for पाश यदि आप पसंद:

$.post('/Students/StudentSearchResult', studentNames, function(result) { 
    var students = result.Students; 
    for (var i = 0; i < students.length; i++) { 
     var student = students[i]; 
     alert('FirstName: ' + student.FirstName + ' LastName:' + student.LastName); 
    } 
}); 

अद्यतन:

ऐसा लगता है कि मेरे पास है मैं विश्वास है कि आप एक प्रदर्शन कर रहे थे द्वारा एक गलती की है लग रहा है AJAX अनुरोध। इसके बजाय आपको जावास्क्रिप्ट में मॉडल गुणों की आवश्यकता है। यहां बताया गया है कि यह कैसे किया जा सकता है:

@model StudentSearchResult 
<script type="text/javascript"> 
    var students = @Html.Raw(Json.Encode(Model.Students)); 
    // students is a javascript array that will look like this: 
    // students = [{"FirstName":"fn1","LastName":"ln1"}, {"FirstName":"fn2","LastName":"ln2"}, ...]; 
    for (var i = 0; i < students.length; i++) { 
     var student = students[i]; 
     alert('FirstName: ' + student.FirstName + ' LastName:' + student.LastName); 
    } 
</script> 
+0

आपके उत्तर के लिए धन्यवाद लेकिन पोस्ट फ़ंक्शन मॉडल वापस नहीं करता है, मुझे पता है क्योंकि ऐसा इसलिए है क्योंकि मैंने ' पूरा कोड पोस्ट नहीं करें लेकिन मेरे पास यह हाथ नहीं था। – Ricardo

+1

आपके $। प्रत्येक उदाहरण में, यदि आप पोस्ट से मॉडल नहीं ले रहे हैं, लेकिन मॉडल मॉडल से ही आप सरणी में तत्वों को कैसे पेश करेंगे, तो मैं इसे आजमा रहा हूं: var names = new Array(); var उम्मीदवार = "@ मॉडल। कैंडीडेट्स"; // यह मुझे (var i = 0; i Ricardo

+1

के साथ एक सरणी को पॉप्युलेट करना है। उदाहरण के साथ कृपया मेरा अद्यतन उत्तर देखें कि आप इसे कैसे प्राप्त कर सकते हैं। –

1
for (var i = 0; i < length; i++) 

for (int i = 0; i < length; i++) 

के बजाय

काम करना चाहिए।

+1

पर रख सकता है चूंकि मैं अपने दृश्य मॉडल तक पहुंचने के लिए रेजर का उपयोग कर रहा हूं, मुझे त्रुटि मिलती है कि "i" वेरिएबल नहीं मिला – Ricardo

1

आप परिणाम को फिर से शुरू करने के लिए jquery के $ .ech का उपयोग कर सकते हैं।

$.each(yourModel,function(){//do with loop}); 

और त्रुटि के लिए।आप पाश चर की घोषणा में गलती

for (var i = 0; i < length; i++) 
1

आपको क्या चाहिए उत्पादन के लिए JSON के रूप में ग्राहक के लिए उपयोगकर्ता नाम है की तरह लग रहा है? इस प्रयास करें:

var names = @Model.StudentSearchResult.Select(s => new { s.FirstName, s.LastName }).ToList(); 

मैं उस्तरा वाक्य रचना के साथ काफी परिचित नहीं हूँ, लेकिन मुझे लगता है कि यदि उपरोक्त कोड को समझ सकता हूँ।

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