none
Como capturar dados de uma lista de uma View na Controller?

    Question

  • Amigos, sou iniciante neste framework (ASP.Net MVC), estou com muita dificuldade em capturar valores de uma lista complexa no meu controler...segue o meu código:

    [View]
    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<FrontEnd.Controllers.Entity.QuestionItem>>" %>
    <%
    using (Html.BeginForm()) {%>
        <fieldset>
            <table>
            <% foreach (var item in Model) { %>
                <tr>
                <%foreach(FrontEnd.Controllers.Entity.QuestionSubItem qSub in item.SubItem){ %>
                    <td>
                            <%= Html.RadioButton("WasCheckedByUser", qSub.WasCheckedByUser) %>
                    </td>
                    <td>
                            <%= Html.Encode(qSub.Description) %>
                    </td>
                <%} %>
            </tr>
        <% } %>
        </table>
        <input type="submit" value="sub10"/>
    </fieldset>
    <% } %>

    [Controller]
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Index(List<QuestionSubItem> qt){
        return RedirectToAction("Index", "Test");
    }

    Criei a minha view com strongtype List<QuestionSubItem> na opção view content escolhi edit, a minha necessidade é obter os valores do checkbox WasCheckedByUser alguem faz ideia de como posso resolver o problema?

    E o meu problema é que o parametro qt, sempre vem nulo...

    Abraços Pisani.

    Pisani
    Sunday, November 08, 2009 9:48 PM

Answers

  • Carlos, usando o binder padrão, voce terá que dar um jeito do nome desses checkBox ficarem assim:

    qt[0].Propriedade
    qt[1].Propriedade
    qt[2].Propriedade
    qt[3].Propriedade

    onde 'qt' é o nome do parametro da sua action.
    você pode fazer uma variável para o index, incrementá-la no seu foreach e formatar a string do id para que fique como eu disse acima...

    [View]
    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<FrontEnd.Controllers.Entity.QuestionItem>>" %>
    <% using (Html.BeginForm()) {%>
        <fieldset>
            <table>
            <% 
                int index = 0;
                foreach (var item in Model) { %>
                <tr>
                <%foreach(FrontEnd.Controllers.Entity.QuestionSubItem qSub in item.SubItem){ %>
                    <td>
                            <%= Html.RadioButton(String.Format("qt[{0}].WasCheckedByUser", index), qSub.WasCheckedByUser) %>
                    </td>
                    <td>
                            <%= Html.Encode(qSub.Description) %>
                    </td>
                <%} %>
            </tr>
        <% } %>
        </table>
        <input type="submit" value="sub10"/>
    </fieldset>
    <% } %>
    Eu sei que você está começando, mas vai a dica...
    Usar um html helper, nesse caso, é uma boa prática e deixará seu código mais limpo. Procure usá-los sempre que houver um if ou um laço..

    Como criar html helpers
    Se for algo um pouco mais complicado do que no exemplo do link que passei, procure usar TagBuilder dentro do seu html helper, que é tipo um StringBuilder para tags html.


    +.+
    • Edited by Davi Moreira Fiamenghi Sunday, November 08, 2009 11:04 PM Novamente, apanhando pra formatação ¬¬
    • Marked as answer by Carlos Pisani Sunday, November 08, 2009 11:11 PM
    Sunday, November 08, 2009 10:52 PM