Если вы хотите вернуться к итерации класса непосредственно с ее членом 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;
}
Проблема вашего подхода в том, что атрибут имени, который вы исправили, установил значение «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" />