我很困惑如何有效地使用ASP.NET MVC的Html.DropDownList助手。DropDownList不能在ASP.Net中工作100%MVC
背景:我有一个5页的表单,每次单击“下一步”时将数据保存到表单中。用户可以在部分之间来回导航,因此以前的部分将已经预填充了先前输入的数据。
这适用于TextBoxes。但不是DropDownLists。我曾尝试不同的方法的负载,包括:
- How to add static list of items in MVC Html.DropDownList()
- Setting selected item to DropdownList in MVC Application?
我有一个视图模型等taht我有我的名单,我的模型(生成的LINQ到SQL类)作为属性。例如:
public class ConsultantRegistrationFormViewModel
{
public IConsultantRegistration ConsultantRegistration { get; private set; }
public SelectList Titles { get; private set; }
public SelectList Countries { get; private set; }
public SelectList Currencies { get; private set; }
public int CurrentSection { get; private set; }
private ConsultantRegistrationFormViewModel(IConsultantRegistration consultantRegistration)
{
ConsultantRegistration = consultantRegistration;
CurrentSection = 1;
Titles = new SelectList(new string[] { "Mr", "Mrs", "Miss", "Ms", "Dr", "Sir" });
Countries = new SelectList(countries.Select(q => q.Name));
Currencies = new SelectList(currencies,"CurrencyCode","FriendlyForm");
}
}
上得到我的控制器的编辑操作是这样的:
public class ConsultantRegistrationController : Controller
{
public IConsultantRegistrationRepository ConsultantRegistrationRepository { get; private set; }
public ICountryRepository CountryRepository { get; private set; }
public IEnumerable<ICountry> Countries { get; private set; }
public ConsultantRegistrationController()
{
ConsultantRegistrationRepository = RepositoryFactory.CreateConsultantRegistrationRepository();
CountryRepository = RepositoryFactory.CreateCountryRepository();
Countries = CountryRepository.GetCountries().ToArray();
}
public ActionResult Edit(Guid id, int sectionIndex)
{
IConsultantRegistration consultantRegistration = ConsultantRegistrationRepository.GetConsultantRegistration(id);
SelectList bankBranchCountriesSelectList = new SelectList(Countries, "BankBranchCountry", "CountryName", consultantRegistration.BankBranchCountry);
ViewData["bankBranchCountrySelectList"] = bankBranchCountriesSelectList;
return View(new ConsultantRegistrationFormViewModel(consultantRegistration,sectionIndex, Countries,Currencies));
}
}
我的观点做:
<%: Html.DropDownList("ConsultantRegistration.BankBranchCountry",ViewData["bankBranchCountrySelectList"] as SelectList) %>
这给我的错误:
DataBinding: 'IWW.ArrowPay.ConsultantRegistration.Data.Country' does not contain a property with the name 'BankBranchCountry'.
它所做的,看看架构此属性的:
public interface IConsultantRegistration
{
Guid ID { get; set; }
[DisplayName("Branch Country")]
string BankBranchCountry { get; set; }
}
(我的LINQ到SQL类型ConsultantRegistration实现IConsultantRegistration)
看来,它正试图绑定到错误类型有关系吗?
如果我用这个在我看来(和使用我的控制器的国家属性):
<%: Html.DropDownList("ConsultantRegistration.BankBranchCountry ",Model.Countries,"(select a Country)") %>
我得到保存的值很好,但我的模型不会在之后的更新。
如果我用这个在我看来:在我的视图模型
<%: Html.DropDownListFor(model=>model.ConsultantRegistration.BankBranchCountry ",Model.Countries,"(select a Country)") %>
我得到的名单,并将其职位所选择的值改回,但不预先选择当前选定的项目。
所以我有一个解决方案遍布各地,但不是全部在一个地方。
希望你能帮助填补我的无知。
你能为下拉菜单显示呈现的HTML吗? – 2010-04-09 11:51:57
谢谢马尔科姆,抱歉,我现在不能。我太过于剽窃它,无法使用它。无论如何,它已经有了工作。 – 2010-04-09 14:44:24