代码之家  ›  专栏  ›  技术社区  ›  Valery

选择列表,ASP.NET MVC

  •  1
  • Valery  · 技术社区  · 6 年前

    我正在处理一个selectlist,并用表中的数据填充它。我正试图将它绑定到另一个对象的ID。

    编辑 更新了模式以反映我忽略的内容。我已经更新了它以显示 准确的 每个项目的名称。我认为问题在于每个单元都有一张表,每个表都有一个产品。(该表将包含产品的更多信息,但一个单位将有大量其他信息,因此我想将它们分开,以便清楚地知道是什么。)

    我认为发生了一些事情,“工作表”没有被初始化为对象,并且当绑定发生时,它没有要绑定的对象,因为它是一个层次的深度。告诉我这是否有道理,或者我是否完全偏离了底线。

    **Unit**
    UnitID (PK)
    
    **ProductSheet**
    UnitId (FK)(PK)
    ItemId (FK)
    
    **Items**
    ItemId (PK)
    ItemTitle
    

    只是……不起作用。我有这个密码。

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

    但在回发中,selectlist始终为空!这是视图代码。我在这里真的迷路了,我已经学习了很多例子,但还是找到了铺位。

    <%= Html.DropDownList("Items") %>
    
    3 回复  |  直到 15 年前
        1
  •  3
  •   David Andres    15 年前

    您的视图代码应为:

    <% var selectItems = ViewData["Items"] as SelectList; %>
    <%= Html.DropDownList("ProductSheet.ItemId", selectItems) %>
    
        2
  •  0
  •   Ciel    15 年前

    项目的完整样本可在 this url

    这些是操作方法。

    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();
        }
    }
    

    这是创建视图。

    <%@ 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>
    
        3
  •  0
  •   Ciel    15 年前

    我在答案上做了标记,现在似乎取得了一些进展,我想我开始更好地理解它了。

    当我传递要在DropDownList的名称字段中指定为字符串的对象的“路径”时,它似乎可以工作。但这对我来说没什么意义。你能解释一下怎么回事吗?