我正在构建我的第一个MVC应用程序,通过了'NerdDinner'教程。但是,在以相同的方式从SelectList创建下拉列表时,我遇到了一个问题。
出于某种原因,当我调出“编辑”视图时,下拉列表未显示正确的选择,即使数据在数据库中另外设置并且“详细信息”视图显示正确的值。每个人都想出列表中的第一个值。
我已经逐段浏览了NerdDinner代码并且不能在我的生活中看到任何差异,但该应用程序将在编辑时正确显示当前值的下拉列表,而我的不会。
任何人都有建议从哪里出发?如果有人要求提供特定的内容,我可以发布代码片段。
更新
在字段集中:
<p>
<label for="Parking">Parking Arrangement:</label>
<%= Html.DropDownList("Parking", Model.Parking)%>
<%= Html.ValidationMessage("Parking", "*") %>
</p>
编辑操作:
//
// GET: /Buyer/Edit/2
public ActionResult Edit(int id)
{
Buyer_Profile buyer_profile = buyerRepository.GetBuyerProfileByID(id);
if (buyer_profile == null)
return View("NotFound");
else if (!buyer_profile.IsOwnedBy(User.Identity.Name, id))
return RedirectToAction("Index", "Home");
else
return View(new BuyerFormViewModel(buyer_profile));
}
他们以NerdDinner为例构建它,我创建了一个'... FormViewModel':
public class BuyerFormViewModel
{
// Properties
public Buyer_Profile Buyer_Profile { get; private set; }
public SelectList Parking { get; private set; }
// Constructor
public BuyerFormViewModel(Buyer_Profile buyer_profile)
{
Buyer_Profile = buyer_profile;
Parking = new SelectList(BuyerProfileOptions.Parking, Buyer_Profile.Parking);
}
}
当值已在详细信息视图中显示并存储在d / b中时,单击“编辑”时生成的HTML:
<p>
<label for="Parking">Parking Arrangement:</label>
<select id="Parking" name="Parking"><option>No Preference</option>
<option>On Street</option>
<option>Assigned Street</option>
<option>Open Garage</option>
<option>Covered Garage</option>
</select>
</p>
同一表单中的文本字段的值已正确填充。这只是所有下拉菜单都没有!
非常感谢你的关注。
答案 0 :(得分:2)
咦。似乎htmlhelper太好了。我删除了对模型的引用,一切正常!
即
<%= Html.DropDownList("Parking", Model.Parking)%>
变为
<%= Html.DropDownList("Parking")%>
我们是金色的。 ViewData是否包含一些名为“Parking”的内容,因为我在模型中引用它,因此它会压缩其他值...或者其他东西......?
答案 1 :(得分:1)
人员快速提示 - 当需要下拉列表时,不要将任何模型属性“标题”命名为。该框架将与视图标题混淆并且不起作用 - 我花了整整一个下午的时间撕掉我的头发。需要睡在上面才能意识到发生了什么。