В MVC 5, как передать данные объекта таблицы в виде списка в модель представления контроллера?

Если вы хотите вернуться к итерации класса непосредственно с ее членом std::vector или std::map, вот код для этого:

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;
#include <vector>
using std::vector;
#include <map>
using std::map;


/////////////////////////////////////////////////////
/// classes
/////////////////////////////////////////////////////

class VectorValues {
private:
    vector<int> v = vector<int>(10);

public:
    vector<int>::iterator begin(){
        return v.begin();
    }
    vector<int>::iterator end(){
        return v.end();
    }
    vector<int>::const_iterator begin() const {
        return v.begin();
    }
    vector<int>::const_iterator end() const {
        return v.end();
    }
};

class MapValues {
private:
    map<string,int> v;

public:
    map<string,int>::iterator begin(){
        return v.begin();
    }
    map<string,int>::iterator end(){
        return v.end();
    }
    map<string,int>::const_iterator begin() const {
        return v.begin();
    }
    map<string,int>::const_iterator end() const {
        return v.end();
    }

    const int& operator[](string key) const {
        return v.at(key);
    }
    int& operator[](string key) {
        return v[key];
    } 
};


/////////////////////////////////////////////////////
/// main
/////////////////////////////////////////////////////

int main() {
    // VectorValues
    VectorValues items;
    int i = 0;
    for(int& item : items) {
        item = i;
        i++;
    }
    for(int& item : items)
        cout << item << " ";
    cout << endl << endl;

    // MapValues
    MapValues m;
    m["a"] = 1;
    m["b"] = 2;
    m["c"] = 3;
    for(auto pair: m)
        cout << pair.first << " " << pair.second << endl;
}
0
задан Liam 17 January 2019 в 16:30
поделиться

1 ответ

Проблема вашего подхода в том, что атрибут имени, который вы исправили, установил значение «Id». MVC связывает коллекцию, добавляя «[index]» в качестве префикса к атрибуту имени HTML. Вы можете найти более подробную информацию об этом здесь - https://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/

Так , если вы удалите это new { name = "Id" } и используете for вместо foreach, ваш Razor будет выглядеть примерно так:

@for (int i=0; i < Model.Count; i++)
{
    @Html.DisplayFor(modelItem => Model[i].Id)
    @Html.HiddenFor(modelItem => Model[i].Id)
    ....
}

И результат скрытого ввода должен выглядеть примерно так: [ 118]

<input type='hidden' name="[0].Id" id="0__Id" />
<input type='hidden' name="[1].Id" id="1__Id" />
<input type='hidden' name="[2].Id" id="2__Id" />
0
ответ дан TiagoBrenck 17 January 2019 в 16:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: