0

我有一个包含组织列表的 mvc3 下拉列表。我可以使用下面的代码填写它。但是当我提交表单时,我得到的是 ID 而不是名称,并且相应的 ID 为空。

控制器

    ViewBag.DropDownList =organizationModelList.Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString() });
return view();

模型

public class SubscriberModel
    {
        public OrgnizationList Organization { get; set; }
        public RegisterModel RegisterModel { get; set; }
        public SubscriberDetails SubscriberDetails { get; set; }
    }
    public class OrgnizationList
    {
        [Required]
        public ObjectId Id { get; set; }
        [Required]
        [DataType(DataType.Text)]
        [Display(Name = "Name")]
        public string Name { get; set; }
    }

看法 @

model FleetTracker.WebUI.Models.SubscriberModel
@using (Html.BeginForm((string)ViewBag.FormAction, "Account")) {
<div>
@Html.DropDownListFor(m => m.Organization.Name, (IEnumerable<SelectListItem>)ViewBag.DropDownList, "---Select a value---")
</div>
}

在此处输入图像描述

当我将其更改为 tom => m.Organization.Id 时,模型状态将更改为无效。

4

2 回答 2

1

您真的需要返回名称而不是 Id 吗?如果是,那么代替这个:

ViewBag.DropDownList =organizationModelList.Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString() });

做这个:

ViewBag.DropDownList =organizationModelList.Select(x => new SelectListItem { Text = x.Name, Value = x.Name });

然后删除Required. OrgnizationList.Id如果OrgnizationList是一个实体,我认为它是,那么你会遇到麻烦。我建议你有一个代表你输入的视图模型。因此,您不必处理不必要的必填字段

但是如果Name不是唯一的呢?为什么您不能只接受Id并将其保存在您的数据存储中?OrgnizationList我假设您没有修改 的名称。

更新: 如果您真的需要两者,则将 Id 放在隐藏字段中:

你的控制器方法

ViewBag.DropDownList =organizationModelList.Select(x => new SelectListItem { Text = x.Name, Value = x.Id });

你的模型

public class SubscriberModel
{
    public int OrganizationId { get; set; }
    // your other properties goeshere
}

你的看法

<div>
    @Html.HiddenFor(m=>m.OrganizationId)
    @Html.DropDownListFor(m => m.Organization.Name, (IEnumerable<SelectListItem>)ViewBag.DropDownList, "---Select a value---")
</div>

还需要一点js...

$("Organization_Name").change(function(){
    $("#OrganizationId").val($(this).val());
});
于 2013-04-04T10:23:38.570 回答
0

我是用

 $(document).ready(function () {
                $("#DropDownList").change(function () {
                    $("#Organization_Id").val($(this).val());
                    $("#Organization_Name").val($("#DropDownList option:selected").text());

                });
            }); 
    @Html.HiddenFor(m=>m.Organization.Id)
    @Html.HiddenFor(m=>m.Organization.Name)
    @Html.DropDownList("DropDownList", string.Empty)

控制器

ViewBag.DropDownList = new SelectList(organizationModelList, "Id", "Name");
于 2013-04-05T07:59:32.260 回答