Pergunta

[Eu resolvi isso mesmo, ver a minha resposta para a causa]

Estou tendo problemas para obter valores do formulário para um argumento IList <> em um conjunto método de controlador corretamente.

minha classe de controlador esta aparência:

public class ShoppingBasketController : Controller {

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

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Add(IList<ShoppingBasketItem> items) {
        Session["basket"] = items; // for testing
        return RedirectToAction("Index");
    }
}
public class ShoppingBasketItem {
     public int ItemID;
     public int ItemQuantity;
}

A forma ligeiramente aparadas:

<% using (Html.BeginForm("Add", "ShoppingBasket")) { %>
    <% int codeIndex = 0;
    foreach (Product product in products) { %>
        <%= Html.Hidden("items[" + codeIndex + "].ItemID", product.Id) %>
        <%= Html.TextBox("items[" + codeIndex + "].ItemQuantity", "0", new { size = "2"}) %>
        <% codeIndex++;
    }
} %>

Que produz marcação como:

<form action="/Basket/Add" method="post">
    <input id="items[0]_ItemID" name="items[0].ItemID" type="hidden" value="1" />
    <input id="items[0]_ItemQuantity" name="items[0].ItemQuantity" size="2" type="text" value="0" />

    <input id="items[1]_ItemID" name="items[1].ItemID" type="hidden" value="2" />
    <input id="items[1]_ItemQuantity" name="items[2].ItemQuantity" size="2" type="text" value="0" />

    <input id="items[2]_ItemID" name="items[2].ItemID" type="hidden" value="3" />
    <input id="items[2]_ItemQuantity" name="items[2].ItemQuantity" size="2" type="text" value="0" />
</form>

Eu verifiquei os valores do formulário que são submetidos e eles estão corretos. O número correto de ShoppingBasketItems também se colocar em Session["basket"], porém tanto o ItemID e ItemQuantity de cada um são zero. Parece ser decodificar corretamente a lista de valores do formulário, mas não pegar as próprias propriedades.

Eu estou usando MVC RC2, e com base numa href="http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx" artigo por Scott Hanselman I 'm certeza que meu código está correto. Estou faltando alguma coisa?

Foi útil?

Solução

Solução

Depois de baixar a fonte MVC eu ainda não podia ver por que ele não iria funcionar, então eu presumi que deve ser algo a ver com o tipo I estava tentando bind. suficiente certeza, os valores sendo variáveis ??de membro, em oposição a propriedades, foi o culpado. Isso ocorre porque a usos modelo pasta reflexão para definir propriedades, que não estava encontrando através da chamada para TypeDescriptor.GetProperties(Type).

Atualizando a classe valor a esta resolvido (depois de horas de bater a cabeça fora da parede devo acrescentar !!):

public class ShoppingBasketItem {
    public int ItemID { get; set; }
    public int ItemQuantity { get; set; }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top