-1

我在视图中有以下模型和简单的下拉菜单。我想在下拉列表中填充客户名称。我尝试了以下代码,但它不起作用,任何人都可以知道这段代码有什么问题。

模型

 public class customer
{

public int id { get; set; }
public string name { get; set; }
public string address { get; set; }

  }

///////////////////////

    @{
   Layout = null;
   }

    @model IEnumerable<MvcApplication1.customer>

      <!DOCTYPE html>

        <html>
    <head>
       <meta name="viewport" content="width=device-width" />
      <title>Index</title>
   </head>
         <body>
      <div>

 @Html.DropDownListFor(m=>m.name, new SelectList(Model,"id","name"));

        </div>
4

3 回答 3

2

在您尝试这样做时,您犯了一些基本错误。首先尝试了解 MVC 的幕后情况以及这些关键字的含义。

你已经定义了

@model IEnumerable<MvcApplication1.customer>

那么你有以下代码

@Html.DropDownListFor(m=>m.name, new SelectList(Model,"id","name"));

在这里,您m表示您已初始化为IEnumerable<MvcApplication1.customer>. 您正在尝试访问 IEnumerable ( m => m.name)中名为 name 的属性,IEnumerable但没有此类属性。如果您出于某种原因想要访问您的模型,您@model应该是一个 Customer 对象。然后你可以像访问它@Html.DropDownListFor(m=>m.name, new SelectList(Model,"id","name"));

在评论中,您说此代码@Html.DropDownList("name", new SelectList(Model, "id", "name"));工作正常。是的,它有效,因为您正在使用 Id 创建一个新的 html 选择元素,"name"并且它列出了Model作为选择选项中的任何内容。

好的,足够的解释。

这是我为您的问题建议的解决方案。

在您的控制器操作中,按如下方式实现代码流。

var dropdownDataList = //select your data from the database or any place as a list;

var dropdownOptions = dropdownDataList.Select(d => new {
    id = d.valueforid,
    name = d.valueforname
});

ViewBag.DropdownListOptions = new SelectList(dropdownOptions, "id", "name");

return View();

现在在您看来,请执行以下操作。

@{
    Layout = null;
}

@model MvcApplication1.customer

<!DOCTYPE html>

<html>
    <head>
       <meta name="viewport" content="width=device-width" />
       <title>Index</title>
    </head>
    <body>
        <div>
            @Html.DropDownListFor(m=>m.name, (SelectList)ViewBag.DropdownListOptions)
        </div>
    </body>
</html>

尝试浏览 MSDN 中的这些文章。 http://msdn.microsoft.com/en-us/library/gg416514(v=vs.108).aspx

希望这可以帮助。

干杯,阿米拉

于 2013-07-01T22:03:52.377 回答
2

Stack Overflow 上有很多关于这个确切问题的示例。我之前已经回答过很多次了。

使用视图模型在视图上表示您的数据,不要将您的域对象传递给视图。视图模型具有您在视图上需要的属性,在这种情况下,我只会处理您的客户的下拉列表。

您的视图模型可能如下所示:

public class CustomerViewModel
{
     public int CustomerId { get; set; }

     public IEnumerable<Customer> Customers { get; set; }
}

您的客户类别:

public class Customer
{
     public int Id { get; set; }

     public string Name { get; set; }
}

你的控制器:

public class CustomerController : Controller
{
     private readonly ICustomerRepository customerRepository;

     public Customer(ICustomerRepository customerRepository)
     {
          this.customerRepository = customerRepository;
     }

     public ActionResult Create()
     {
          CustomerViewModel viewModel = new CustomerViewModel
          {
               Customers = customerRepository.GetAll()
          };

          return View(viewModel);
     }
}

您的看法:

@model YourProject.ViewModels.Customers.CustomerViewModel

@Html.DropDownListFor(
     x => x.CustomerId,
     new SelectList(Model.Customers, "Id", "Name", Model.CustomerId),
     "-- Select --"
)
@Html.ValidationMessageFor(x => x.CustomerId)

我希望这有帮助。

于 2013-07-02T09:20:38.310 回答
0

试试这个把你的模型改成这样

public class customer
{

public int id { get; set; }
public string SelectedName { get; set; }
 public IEnumerable<SelectListItem> Names { get; set; }
public string address { get; set; }

  }

在控制器中

[HttpGet]
public ActionResult Customer()
{
  var names=//collect names from database
  var model = new Customer
    {
       Names = names.Select(m=> new SelectListItem
         {
            value = m.whatever value you want to get(probably Id)
            text = m.name you want to display
         })
    };
    return View(model);
}

并且在视野中

@model MvcApplication1.customer
@Html.DropDownListFor(model => model.SelectedName, Model.Names)
于 2013-07-01T13:31:52.107 回答