1 votes

Liste de sélection, ASP.NET MVC

Je travaille avec une liste de sélection et je la remplis avec les données d'une table. J'essaie de la lier à l'ID d'un autre objet.

EDITAR J'ai mis à jour le schéma pour refléter quelque chose que j'ai négligé. Je l'ai mis à jour pour montrer le exact les noms de chaque élément. Je pense que le problème vient du fait que chaque Unité a une feuille, et que chaque feuille a un produit. (La fiche contiendra plus d'informations pour le produit, mais une Unité aura beaucoup d'autres informations, donc j'ai voulu les séparer pour que ce soit clair ce qui est quoi).

Je pense que quelque chose se passe et que la "feuille" n'est pas initialisée en tant qu'objet, et que lorsque la liaison se produit, elle n'a pas d'objet auquel se lier, puisqu'elle est à un niveau de profondeur. Dites-moi si cela a un sens ou si je suis complètement à côté de la plaque.

**Unit**
UnitID (PK)

**ProductSheet**
UnitId (FK)(PK)
ItemId (FK)

**Items**
ItemId (PK)
ItemTitle

C'est juste que ... ça ne marche pas. J'ai ce code.

DatabaseDataContext db = new DatabaseDataContext();
Unit unit = new Unit();
ViewData["Items"] = new SelectList( db.Items, "Id", "ItemTitle", unit.ProductSheet.ItemId);

Mais dans le postback, la selectList est toujours nulle et vide ! Voici le code de la vue. Je suis vraiment perdue ici, j'ai suivi beaucoup d'exemples et je n'ai toujours rien trouvé.

<%= Html.DropDownList("Items") %>

3voto

David Andres Points 13569

Votre code de vue devrait être le suivant :

<% var selectItems = ViewData["Items"] as SelectList; %>
<%= Html.DropDownList("ProductSheet.ItemId", selectItems) %>

0voto

Ciel Points 4098

Un échantillon complet du projet est disponible à l'adresse suivante cette url

Ce sont les méthodes d'action.

public ActionResult Create()
{
        DatabaseDataContext database = new DatabaseDataContext();
        Unit u = new Unit();
        u.Sheet = new Sheet();
        ViewData["ProductListing"] = new SelectList(database.Products, "ProductId", "ProductName", u.Sheet.ProductId);
    return View();
} 

//
// POST: /Home/Create

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Unit u)
{
    try
        {
            DatabaseDataContext database = new DatabaseDataContext();
            database.Units.InsertOnSubmit(u);
            database.SubmitChanges();
        // TODO: Add insert logic here

        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}

Voici la vue de création.

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MVC.Models.Contexts.Unit>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Create
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>Create</h2>

    <%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %>

    <% using (Html.BeginForm()) {%>

        <fieldset>
            <legend>Fields</legend>
            <%= Html.DropDownList("ProductListing") %>
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>

    <% } %>

    <div>
        <%=Html.ActionLink("Back to List", "Index") %>
    </div>

</asp:Content>

<asp:Content ID="Content3" ContentPlaceHolderID="ScriptContent" runat="server">
</asp:Content>

0voto

Ciel Points 4098

J'ai marqué la réponse qui semble avoir fait des progrès maintenant, je pense que je commence à mieux comprendre.

Lorsque je passe le "chemin" de l'objet à assigner comme chaîne de caractères dans le champ du nom de la liste déroulante, cela semble fonctionner. Mais cela n'a pas vraiment de sens pour moi. Pouvez-vous mieux expliquer ce qui se passe ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X