Asp.net mvc 未选择DropDownList项目

Asp.net mvc 未选择DropDownList项目,asp.net-mvc,drop-down-menu,selected,Asp.net Mvc,Drop Down Menu,Selected,很明显,我仍然缺少一些关于如何在DropDownList中绑定所选项目的信息 我在存储库中按如下方式设置SelectList: public SelectList GetAgencyList(System.Guid donorId, Int32 selected) { AgenciesDonorRepository adRepo = new AgenciesDonorRepository(); List<AgenciesDonor> a

很明显,我仍然缺少一些关于如何在DropDownList中绑定所选项目的信息

我在存储库中按如下方式设置SelectList:

    public SelectList GetAgencyList(System.Guid donorId, Int32 selected)
    {
        AgenciesDonorRepository adRepo = new AgenciesDonorRepository();
        List<AgenciesDonor> agencyDonors = adRepo.FindByDonorId(donorId);

        IEnumerable<SelectListItem> ad = from a in agencyDonors 
               select new SelectListItem {
                 Text = a.Agencies.AgencyName, 
                 Value = a.AgenciesDonorId.ToString() 
               };

        return(new SelectList(ad, "Value", "Text", (selected == 0 ? 0 : selected)));
    }
在我看来,这是:

<%=Html.DropDownList("AgenciesDonorList", (IEnumerable<SelectListItem>)ViewData["AgenciesDonorList"])%>

在返回视图(…)之前的调试器中,我可以看到选择了正确的项(true),而所有其他项都是false。但是在视图中,选择选项永远不会成功,并且始终显示第一次

这与我使用int作为所选参数有关系吗


Thx。Dale将GetAgencyList更改为:

public SelectList GetAgencyList(System.Guid donorId, Int32 selected)
{
    AgenciesDonorRepository adRepo = new AgenciesDonorRepository();
    List<AgenciesDonor> agencyDonors = adRepo.FindByDonorId(donorId);

    var ad = from a in agencyDonors 
           select new {
             Text = a.Agencies.AgencyName, 
             Value = a.AgenciesDonorId
           };

    return(new SelectList(ad, "Value", "Text", selected));
}
public SelectList GetAgencyList(System.Guid donorId,选中Int32)
{
AgenciesDonorRepository肾上腺=新的AgenciesDonorRepository();
列表代理捐赠者=adRepo.FindByDonorId(donorId);
var ad=来自代理中的
选择新的{
Text=a.Agencies.AgencyName,
值=a.AgenciesDonorId
};
返回(新选择列表(广告,“值”,“文本”,已选择));
}

ad不必是
IEnumerable
类型。AgenciesDonorId是否为Int32?

将GetAgencyList更改为:

public SelectList GetAgencyList(System.Guid donorId, Int32 selected)
{
    AgenciesDonorRepository adRepo = new AgenciesDonorRepository();
    List<AgenciesDonor> agencyDonors = adRepo.FindByDonorId(donorId);

    var ad = from a in agencyDonors 
           select new {
             Text = a.Agencies.AgencyName, 
             Value = a.AgenciesDonorId
           };

    return(new SelectList(ad, "Value", "Text", selected));
}
public SelectList GetAgencyList(System.Guid donorId,选中Int32)
{
AgenciesDonorRepository肾上腺=新的AgenciesDonorRepository();
列表代理捐赠者=adRepo.FindByDonorId(donorId);
var ad=来自代理中的
选择新的{
Text=a.Agencies.AgencyName,
值=a.AgenciesDonorId
};
返回(新选择列表(广告,“值”,“文本”,已选择));
}

ad不必是
IEnumerable
类型。AgenciesDonorId是否为Int32?

我必须同意LukLed的说法,我不确定您对该语句做了什么:
(selected==0?0:selected)
如果我传入一个0,它将返回0,如果传入的不是0,它将使用该值

编辑: 哦我看到了。更改演员阵容:

<%=Html.DropDownList("AgenciesDonorList", (IEnumerable<SelectListItem>)ViewData["AgenciesDonorList"])%>

致:


我必须同意LukLed的说法,我不确定您对该语句做了什么:
(selected==0?0:selected)
如果我传入一个0,它将返回0,如果传入的不是0,它将使用该值

编辑: 哦我看到了。更改演员阵容:

<%=Html.DropDownList("AgenciesDonorList", (IEnumerable<SelectListItem>)ViewData["AgenciesDonorList"])%>

致:



Thx。这似乎有所帮助。还将DropDownList视图方法中的第一个参数更改为“AgenciesDonorId”,而不是AgenciesDonorList。合在一起,就行了。“AgenciesDonorId”是正在编辑的表单字段的名称。正如J.13.L所说,将ViewData[“AgenciesDonorList”]强制转换为IQueryable应该替换为,因为您提供了SelectList:)Thx。这似乎有所帮助。还将DropDownList视图方法中的第一个参数更改为“AgenciesDonorId”,而不是AgenciesDonorList。合在一起,就行了。“AgenciesDonorId”是正在编辑的表单字段的名称。正如J.13.L所说,将ViewData[“AgenciesDonorList”]强制转换为IQueryable应该替换为,因为您提供了SelectList:)啊,是的,最后有几个小问题。Thx。啊,是的,最后有几个小问题。谢谢。