SelectList,ASP.NET MVC

时间:2009-09-21 20:47:36

标签: asp.net-mvc

我正在使用SelectList,并使用表中的数据填充它。我正在尝试将其绑定到另一个对象的ID。

修改 更新了Schema以反映我忽略的东西。我已更新它以显示每个项目的完全名称。我认为问题在于每个单元都有一张纸,而每张纸都有一个产品。 (该表格将包含该产品的更多信息,但是一个单位将提供大量其他信息,因此我想将它们分开,以便清楚地了解它是什么。)

我认为发生了一些事情并且“Sheet”没有被初始化为一个对象,并且当绑定发生时,它没有要绑定的对象,因为它是一层深度。告诉我这是否有意义,或者我是否完全偏离基础。

**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始终为null且为空!这是View代码。我真的迷失在这里,我已经按照了很多例子,它仍然提出了铺位。

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

3 个答案:

答案 0 :(得分:3)

您的观看代码应为:

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

答案 1 :(得分:0)

项目的整个示例位于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>

答案 2 :(得分:0)

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

当我传递对象的'path'以在DropDownList的名称字段中指定为字符串时,它似乎有效。但这对我来说并没有多大意义。你能更好地解释一下发生了什么吗?