所以我想得到一个值的下拉列表(==帐号的id)来插入一个新的交易 您可以在下面找到我的观点:
<div id="content">
<h2>Overschrijving</h2>
<p id="topmsg">velden met een * zijn verplicht</p><p> </p>
<dl class="clearfix form">
@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) {
@Html.ValidationSummary(true, "Gelieve alles correct in te vullen.")
<dt>@Html.Label("Rekening: *")</dt>
<dd>@Html.DropDownList("ddlAccounts")</dd>
<dt>@Html.Label("Begunstigde: *")</dt>
<dd>@Html.TextBox("ToAccountNumber")</dd>
<dt>@Html.Label("Bedrag: *")</dt>
<dd>@Html.TextBox("Amount", null, new { @class = "inpshort" })</dd>
<dt>@Html.Label("Mededeling: ")</dt>
<dd>@Html.TextBox("Message", null, new { @class = "inplong" })</dd>
<dd class="buttons">
<input type="submit" value="Bevestigen" />
<input type="submit" value="Annuleren" />
</dd>
}
</dl>
</div>
这是控制器代码:
public ActionResult Transfer(int? id) {
Holder h = Holder.GetHolderByHolderId(Convert.ToInt32(User.Identity.Name));
List<Account> holderAccounts = Account.GetAccountsByHolderId(h.Id);
List<SelectListItem> ddlHolderAccounts = new List<SelectListItem>();
ddlHolderAccounts.Add(new SelectListItem { Text = "selecteer...", Value = "-1", Selected = true });
foreach (Account acc in holderAccounts) {
if (acc.Id == id) {
ddlHolderAccounts.Add(new SelectListItem { Text = acc.Name, Value = acc.Id.ToString(), Selected = true });
} else {
ddlHolderAccounts.Add(new SelectListItem { Text = acc.Name, Value = acc.Id.ToString() });
}
}
ViewData["ddlAccounts"] = ddlHolderAccounts;
return View();
}
[HttpPost]
public ActionResult Transfer(Transaction tra) {
if (ModelState.IsValid) {
Transaction.InsertTransaction(tra.Amount, tra.Message, tra.FromAccountId, tra.ToAccountNumber);
}
return View(tra);
}
现在我经常搜索Google,使用DropDownListFor来填充你的下拉列表可能更好吗?但有人能告诉我一个例子吗?
答案 0 :(得分:1)
通过查看您的代码,我可以看到您没有将SelectListItems列表传递给DropDownList帮助程序。您可以通过以下两种方式之一完成此任务。
1-将它绑定到模型上的属性:
@Html.DropDownListFor(x=>Model.Property, new List<SelectListItem> { new SelectListItem { Text = "Item1", Value = "Value1" })
或者
2-您可以在不绑定模型属性的情况下执行此操作,如:
@Html.DropDownList("propertyName", new List<SelectListItem> { new SelectListItem { Text = "Item1", Value = "Value1" } })
如果您使用的是第二种方法,那么您的控制器操作必须在提交时接受“propertyName”作为参数。
并且不要忘记提供一个SelectListItems列表供您选择(您在代码中没有这样做)。
希望这有帮助。
答案 1 :(得分:0)
应该是 @ Html.DropDownListFor(x =&gt; Model.Property,new List {new SelectListItem {Text =“Item1”,Value =“Value1”}})