2014-11-23 3 views
-2

Array in for цикл возврат null.Json Array возврат null

Когда я делаю это:

abc.a = "1"; 
abc.b = "1"; 
abc.c = "1"; 

Это все в порядке. Но это возвращает нуль:

for (var i = 0; i < 3; i++) { 
    abc[i] = "1";    
} 

Контроллер Mvc:

public class abcController : Controller 
{ 

    public ActionResult Index() 
    { 
    return View(); 
    } 

    [HttpPost] 
    public ActionResult Index(abc val) 
    { 
    return View(); 
    } 
} 

МОДЕЛЬ MVC abcCLASS:

public class abc 
{ 
    public string a {get;set;} 
    public string b { get; set; } 
    public string c { get; set; } 
} 

Html + Jquery

Я хочу, чтобы на воле работа тоже.

Почему в цикле for объект возвращается null?

<input type="button" id="bbb"/> 

<script> 
    var abc = { a: "", b: "", c: "" }; 
    $("#bbb").click(function() { 
    // This not working: 
    for (var i = 0; i < 3; i++) {  
     abc[i] = "1";    
    } 
    // This working: 
    abc.a = "1"; 
    abc.b = "1"; 
    abc.c = "1"; 

    $.ajax({ 
     url: '/abc/index', 
     type: "POST", 
     dataType: 'json', 
     traditional: true, 
     contentType: 'application/json; charset=utf-8', 
     data: JSON.stringify(abc), 
     success: function (response) { 
     console.log(response); 
     } 
    }); 
    }); 
</script> 
+4

Что заставляет вас думать, что 'abc [0] =" 1 "' идентично 'abc.a =" 1 ";'? – dotnetom

+0

Пожалуйста, не используйте форматирование цитаты для чего-то, что не является цитатой. – JJJ

+0

Как мог работать цикл 'for', который генерирует массив. Ваше сообщение возвращается к методу контроллера, который принимает объект, а не коллекцию! –

ответ

0

Вы пытаетесь присвоить какое-либо значение каждому элементу объекта. Проблема в том, что вы пытаетесь рассматривать этот объект как массив, полагая, что JS будет волшебно понимать, что вы хотите сделать. Это не так.

Один из возможных способов на самом деле делать то, что вы хотите:

for (var i in abc) if (abc.hasOwnProperty(i)) {  
    abc[i] = "1"; 
} 

Таким образом a, b, c свойства abc объекта получит значение "1". Так или иначе, вы меняете 0, 1, 2 свойства (да, это допустимые имена для свойств объекта в JS, однако они гораздо чаще используются в массивах).

+0

Я хочу запустить только половину массива, i neet i <5 'ваш exmple его как foreach – david

+0

Какую часть ваших данных вы называете 'array'? – raina77ow

Смежные вопросы