HttpPost Создать MVC - PullRequest
       8

HttpPost Создать MVC

0 голосов
/ 10 марта 2011

У меня есть следующие три класса:

public class AModel { .. } 

public class BModel { 
.. 
public List A { get; set; } 
} 

public class CModel { 
.. 
public List B { get; set; } 
}

Как получить данные в объектах List в httpPost Create of CModel Controller?

с шаблонами редактора:

// CModel
@Html.EditorFor(model => model.B) 
<p>
    <input type="submit" value="Create" />
</p>

// BModel
@Html.EditorFor(model => model.A) 
<p>
    <input type="submit" value="Create" />
</p>

он отлично работает со списком, но я не могу получить доступ к объектам списка в методе создания httpPost.

спасибо заранее,

Бруно Гранджин

Ответы [ 2 ]

0 голосов
/ 13 марта 2011

Большое спасибо за быстрый ответ. Я наконец нашел решение, вот мое определение классов:

public partial class ClasseAmodel
{
    public int id { get; set; }
    public string label { get; set; }
}
public partial class ClasseBmodel
{
    public List<ClasseAmodel> classeA { get; set; }
}
public partial class ClasseCmodel
{        
    public List<ClasseBmodel> classeB { get; set; }
}

Мой ClasseCmodel создать представление:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" 
    type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" 
    type="text/javascript"></script>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Create</legend>
        @Html.EditorFor(Model => Model.classeB)
        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>
}

Мои шаблоны редактора:

@model MetaCrud.Models.ClasseAmodel

<p>
    @Html.LabelFor(model => model.id)
    @Html.TextBoxFor(model => model.id)
    @Html.ValidationMessageFor(model => model.id)
</p>
<p>
    @Html.LabelFor(model => model.label)
    @Html.TextBoxFor(model => model.label)
    @Html.ValidationMessageFor(model => model.label)
</p>

@model MetaCrud.Models.ClasseBmodel

<p>
       @Html.EditorFor(Model => Model.classeA)
</p>

Мои методы создания ClasseCmodelController:

// GET: /ClasseCmodel/Create
public ActionResult Create()
{
    var model = new ClasseCmodel();
    classeB = new List<ClasseBmodel>();
    var b = new ClasseBmodel();
    b.classeA = new List<ClasseAmodel>();
    var a = new ClasseAmodel();
    a.id = 1;
    a.label = "1";
    b.classeA.Add(a);
    a = new ClasseAmodel();            
    a.id = 2;
    a.label = "2";
    b.classeA.Add(a);
    classeB.Add(b);
    classeC = new List<ClasseCmodel>();

    return View(model);
} 

// POST: /ClasseCmodel/Create
[HttpPost]
public ActionResult Create(ClasseCmodel model, FormCollection collection)
{
    return View(model);
}

В последнем методе я восстанавливаю весь набор своих объектов и, в частности, объектов ClasseAmodel:

id = 1;
label = "1";

и

id = 2;
label = "2";

которая была моей главной целью .. Что еще интереснее, я модифицировал свою ClasseCModel так:

public partial class ClasseCmodel
{        
    public List<ClasseCmodel> classeC { get; set; }
}

Чтобы создать рекурсивный список. Я создал шаблон редактора для ClasseCmodel:

<p>
       @Html.EditorFor(Model => Model.classeC)
</p>

И только что добавил:

@Html.EditorFor(Model => Model.classeC)

В ClasseCmodel создать представление. Я могу добавить объекты ClasseCmodel в список classeC без pb, и теперь я получаю рекурсивное представление ..

0 голосов
/ 10 марта 2011

Если у вас есть что-то подобное

public class AModel { .. } 

public class BModel { 
.. 
public List<A>  AList { get; set; } 
} 

public class CModel { 
.. 
public List<B> BList { get; set; } 
}

Вы должны быть в состоянии сделать

CModel model;
var blist model.BList;

foreach(var b in blist)
{
    var alist = b.Alist;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...