c# - 如何在 DropDownFor 的 SelectList 中设置所选项目?

标签 c# asp.net asp.net-mvc entity-framework asp.net-mvc-4

我是 MVC 的新手,但我已经通读了关于这个主题的几个问题。但是,没有一个答案可以解决我的问题。这是我的代码(只是相关的属性):

C# 类

public class Customer
{
    public int CustomerId { get; internal set; }
    public string Name { get; set; }
}

public class Project
{
    public int ProjectId { get; internal set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string Comment { get; set; }

    public Customer CurrentCustomer { get; set; }
}

Controller 类

public ActionResult Edit(int id)
{
    Project item = projectRepository.Get(id);

    ViewBag.AllCustomers = new SelectList(
        new CustomerRepository().Get(), // Returns a List<Customer> of all active customers.
        "CustomerId",
        "Name",
        (object) item.CurrentCustomer.CustomerId);

    return View(item);
}

查看

<div class="editor-label">
    @Html.LabelFor(model => model.CurrentCustomer)
</div>
<div class="editor-field">
    @Html.DropDownListFor(model => model.CurrentCustomer, (SelectList)ViewBag.AllCustomers, "-- Select a Customer. --")
    @Html.ValidationMessageFor(model => model.CurrentCustomer)
</div>

我在不使用 ViewBag 的情况下尝试过此操作(在 View 本身中执行 SelectList 实例化),这也没有用。我试过对 ID 进行硬编码而不是使用 CurrentCustomer.CustomerId,但是当我在 SelectList 本身上设置断点时,我发现它正在正确处理所有内容。

所有其他 StackOverflow 问题都表明上述方法和属性名称应该可以正常工作,但对于我来说,我无法弄清楚这里出了什么问题。我错过了什么?

最佳答案

我怀疑您正在使用 EF Code-First。您犯的错误是试图将 int (id) 分配给实体 CurrentCustomerdropdownlist 只返回一个 id 而不是一个实体。

您应该将一个 Id 发送到您的操作方法,然后找到并分配实体(或者可以说只是外键)

在您的模型中添加一个 Id

public class Project
{
    public int ProjectId { get; internal set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string Comment { get; set; }

    public Customer CurrentCustomer { get; set; }
    public int CurrentCustomerId { get; set; }
}

在您看来

@Html.DropDownListFor(model => model.CurrentCustomerId,
 (SelectList)ViewBag.AllCustomers, "-- Select a Customer. --")

关于c# - 如何在 DropDownFor 的 SelectList 中设置所选项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15774998/

相关文章:

c# - 从客户端 (*) 检测到潜在危险的 Request.Path 值

asp.net - 更改代码隐藏中重复器元素的样式?

c# - 预定义类型 'System.Threading.Tasks.Task' 在全局别名的多个程序集中定义

asp.net-mvc - ASP.NET MVC : Controlling naming conventions of controllers/views?

asp.net-mvc - 让 MVC Controller 轻而模型重

c# - 我如何找出 Telerik 的 RADeditor 默认使用的皮肤?

c# - 如何迭代静态类中的所有静态公共(public)Guid

c# - SmartEnumerable 和 Regex.Matches

c# - 如何使用来自 nuget 的包在 Mono 中构建 C# 程序?

c# string.format 删除我的引号