首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MVC DropDownList SelectedValue未正确显示

MVC DropDownList SelectedValue未正确显示
EN

Stack Overflow用户
提问于 2012-04-06 12:05:46
回答 6查看 49.4K关注 0票数 22

我试着搜索,但没有找到任何解决我的问题的东西。我在剃刀视图上有一个DropDownList,它不会显示我在SelectList中标记为选中的项目。下面是填充列表的控制器代码:

代码语言:javascript
复制
var statuses  = new SelectList(db.OrderStatuses, "ID", "Name", order.Status.ID.ToString());
ViewBag.Statuses = statuses;
return View(vm);

以下是View代码:

代码语言:javascript
复制
<div class="display-label">
   Order Status</div>
<div class="editor-field">
   @Html.DropDownListFor(model => model.StatusID, (SelectList)ViewBag.Statuses)
   @Html.ValidationMessageFor(model => model.StatusID)
</div>

我遍历了它,即使在视图中,它也有正确的SelectedValue,但是,无论选择的值是什么,DDL总是显示列表中的第一项。谁能指出我做错了什么,把DDL设为默认的SelectValue?

EN

回答 6

Stack Overflow用户

发布于 2012-04-06 21:23:05

为每个视图创建一个视图模型。通过这种方式,您将只包含屏幕上所需的内容。由于我不知道您在哪里使用此代码,我们假设您有一个Create视图来添加一个新订单。

为您的创建视图创建一个新视图模型:

代码语言:javascript
复制
public class OrderCreateViewModel
{
     // Include other properties if needed, these are just for demo purposes

     // This is the unique identifier of your order status,
     // i.e. foreign key in your order table
     public int OrderStatusId { get; set; }
     // This is a list of all your order statuses populated from your order status table
     public IEnumerable<OrderStatus> OrderStatuses { get; set; }
}

订单状态类:

代码语言:javascript
复制
public class OrderStatus
{
     public int Id { get; set; }
     public string Name { get; set; }
}

在您的Create视图中,您将拥有以下内容:

代码语言:javascript
复制
@model MyProject.ViewModels.OrderCreateViewModel

@using (Html.BeginForm())
{
     <table>
          <tr>
               <td><b>Order Status:</b></td>
               <td>
                    @Html.DropDownListFor(x => x.OrderStatusId,
                         new SelectList(Model.OrderStatuses, "Id", "Name", Model.OrderStatusId),
                         "-- Select --"
                    )
                    @Html.ValidationMessageFor(x => x.OrderStatusId)
               </td>
          </tr>
     </table>

     <!-- Add other HTML controls if required and your submit button -->
}

您的创建操作方法:

代码语言:javascript
复制
public ActionResult Create()
{
     OrderCreateViewModel viewModel = new OrderCreateViewModel
     {
          // Here you do database call to populate your dropdown
          OrderStatuses = orderStatusService.GetAllOrderStatuses()
     };

     return View(viewModel);
}

[HttpPost]
public ActionResult Create(OrderCreateViewModel viewModel)
{
     // Check that viewModel is not null

     if (!ModelState.IsValid)
     {
          viewModel.OrderStatuses = orderStatusService.GetAllOrderStatuses();

          return View(viewModel);
     }

     // Mapping

     // Insert order into database

     // Return the view where you need to be
}

这将在您单击submit按钮时持久化您的选择,并被重定向回create视图以进行错误处理。

我希望这能帮到你。

票数 3
EN

Stack Overflow用户

发布于 2017-11-03 01:13:13

当您在模型中声明它时,请确保您的返回选择值是一个字符串而不是和int。

示例:

代码语言:javascript
复制
public class MyModel
{
    public string StatusID { get; set; }
}
票数 3
EN

Stack Overflow用户

发布于 2018-10-06 09:58:14

对我来说,这个问题是由较大的css填充数字(下拉字段中的顶部和底部填充)引起的。基本上,该项目正在显示,但看不见,因为它是下降的。我通过使我的填充数字更小来修复它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10039006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档