C# 在下拉列表框中显示项目

C# 在下拉列表框中显示项目,c#,asp.net-mvc,html-select,dropdownbox,C#,Asp.net Mvc,Html Select,Dropdownbox,我试图在下拉列表框中显示基于先前条目的“预定访问”列表。我能够收集信息,但当我显示它时,下拉列表框会变成一个输入框,我想要的信息中没有一个被显示出来。我希望我的物品显示格式为:2012年10月2日-在学校 以下是我的代码: 这是我收集访问日期和地点信息的地方 public JsonResult GetVisitDetails(Guid visitEntryId) { var model = new VisitDetailModel(); VisitEntr

我试图在下拉列表框中显示基于先前条目的“预定访问”列表。我能够收集信息,但当我显示它时,下拉列表框会变成一个输入框,我想要的信息中没有一个被显示出来。我希望我的物品显示格式为:2012年10月2日-在学校

以下是我的代码:

这是我收集访问日期和地点信息的地方

public JsonResult GetVisitDetails(Guid visitEntryId)
    {
        var model = new VisitDetailModel();
        VisitEntry visitEntry = _visitEntryService.Get(visitEntryId);
        if(visitEntry == null)
        {
            model.Message = string.Format(Message.NotFoundMessage, Resources.Entities.Visit.EntityName);
            return Json(model);
        }
        model.VisitEntryId = visitEntryId;
        model.VisitTypeId = visitEntry.VisitTypeId;
        if (visitEntry.VisitType != null)
            model.VisitType = visitEntry.VisitDate.ToShortDateString();
        return Json(model);
    }
#region Nested Type:VisitDetailModel

    public class VisitDetailModel
    {
        public Guid VisitEntryId { get; set; }
        public short VisitTypeId { get; set; }
        public string VisitType { get; set; }
        public string VisitDate { get; set; }
        public string Message { get; set; }
    }

    #endregion
这是我的AddToViewModel中的内容:

 var visits = _visitEntryService.FindAllForCase(viewModel.CaseId, _currentUser.OfficeId).Where(v=>v.VisitDate <= DateTime.Today.SetToMaximumTime()).OrderByDescending(v=>v.VisitDate).ToList();

        visits.Insert(0, new VisitEntry());
        viewModel.Visits = visits.ToSelectList("VisitEntryId", "Display", viewModel.VisitEntryId.ToString());

        if(viewModel.VisitTypes.Count() == 0)
            ModelState.AddModelError("",string.Format("No active {0} entered.", Kids.Resources.Entities.VisitType.EntityNamePlural));
var visits=\u visitEntryService.FindAllForCase(viewModel.CaseId,\u currentUser.OfficeId)。其中(v=>v.VisitDate v.VisitDate)。ToList();
插入(0,新的visientry());
viewModel.visions=visions.toselect(“VisitEntryId”,“Display”,viewModel.VisitEntryId.ToString());
if(viewModel.VisitTypes.Count()==0)
ModelState.AddModelError(“”,string.Format(“未输入活动的{0})”,Kids.Resources.Entities.VisitType.EntityNamePluble));
要显示下拉列表的My.ascx页面:

<div class="row">
<%:Html.EditorFor(m=>m.VisitEntryId) %>
<%:Html.LabelFor(m=>m.Visits) %>
<%:Html.ValidationMessageFor(m=>m.VisitEntryId) %>

m、 VisitEntryId)%>
m、 浏览次数)%>
m、 VisitEntryId)%>

我的viewModel:

 [LocalizedDisplayName("VisitEntry", NameResourceType = typeof(VisitActivity))]
    public short? VisitEntryId { get; set; }

    [UIHint("DropDownList")]
    [DropDownList(DropDownListTargetProperty = "VisitEntryId")]
    public IEnumerable<SelectListItem> Visits { get; set; }
[LocalizedDisplayName(“VisitEntry”,NameResourceType=typeof(Visitivity))]
公开短片?VisitEntryId{get;set;}
[UIHint(“DropDownList”)]
[DropDownList(DropDownListTargetProperty=“VisitEntryId”)]
公共IEnumerable访问{get;set;}

任何关于我为什么不能显示dropdownlist的信息都会很有帮助

在您的ascx中,您正在为
model.VisitEntryId
进行编辑,它是一个
int

您需要一个
Html.DropDownFor
的下拉列表

您的
型号。访问次数
是一个选择列表,我猜您应该:

<%:Html.LabelFor(m=>m.VisitEntryId) %>
<%:Html.EditorFor(m=>m.Visits) %>
<%:Html.ValidationMessageFor(m=>m.VisitEntryId) %>
m.VisitEntryId)%%>
m、 浏览次数)%>
m、 VisitEntryId)%>

您想要一个下拉列表,在选项右侧显示viewmodel的消息和日期属性吗?但是在你的ascx中,你正在做
EditorFor
!将正确的信息收集到一个选择列表中,然后使用
Html.DropDownFor
@gideon-你是一个救生员!谢谢你帮我注意到这一点。我实际上在ascx中查看了labelFor和EditorFor的标签,并在位置上进行了切换,我对其进行了修复,结果成功了。谢谢你的间接帮助。如果你想回答这个问题,我会给你打分。不客气。我补充了一个答案。谢谢你的洞察力。现在我也明白了——你知道我如何根据这个下拉列表中的选定项对字段进行预填充吗?假设我选择了参观:2012年5月4日——在学校。下面的日期字段将从默认的今天更改为所选日期2012年5月4日,访问类型将为:在学校。我可以在哪里寻找想法或例子?@Amina你想在客户端做这件事吗?这涉及到用javascript更改字段,或者在服务器上做这件事意味着将页面发布到服务器并给出正确的值。谢谢你的帮助,我在作为问题发布后得到了答案。谢谢你。但我还有一个问题,如果你能看一看,也许能分享一些见解。我知道它看起来很麻烦,但我想我会发布尽可能多的代码。