我有點困惑於ASP.NET MVC的行爲,它不會在POST後改變下拉列表的值。有人可以解釋如何做到這一點。第二個下拉列表選擇的項目在ASP.NET MVC中沒有改變
首先我有一個模型,看起來像這樣:
public class Test
{
public int OneID { get; set; }
public IEnumerable<SelectListItem> OneList
{
get
{
yield return new SelectListItem
{
Text = "Red",
Value = "0"
};
yield return new SelectListItem
{
Text = "Green",
Value = "1"
};
yield return new SelectListItem
{
Text = "Blue",
Value = "2"
};
}
}
public int TwoID { get; set; }
public IEnumerable<SelectListItem> TwoList
{
get
{
yield return new SelectListItem
{
Text = "Ruby",
Value = "0"
};
yield return new SelectListItem
{
Text = "Gem",
Value = "1"
};
yield return new SelectListItem
{
Text = "Bronze",
Value = "2"
};
}
}
}
的觀點在人體內含量這個代碼片段:
<% using (Html.BeginForm("Index", "Home", FormMethod.Post))
{ %>
<table>
<tr>
<td>
<% =Html.DropDownList("OneID", Model.OneList, new
{ @onchange = "this.form.submit();" })%>
</td>
<td>
<% =Html.DropDownList("TwoID", Model.TwoList)%>
</td>
</tr>
</table>
<% } %>
而且GET和POST動作看起來像這個:
public ActionResult Index()
{
Test test = new Test();
test.OneID = 0;
test.TwoID = 0;
return View(test);
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(Test test)
{
test.TwoID = test.OneID;
return View(test);
}
我想要實現的是改變第二個下拉選擇的項目以匹配第每次第一次下拉改變時,首先下拉。因此,我從第一個下拉列表中獲取選定的值,並將其分配給第二個下拉列表使用的ID,然後返回相同的模型。第一個下拉菜單在視圖中正確設置,但不是第二個下拉菜單。
想法?
感謝您的答案Darin。我的例子是設法提煉問題的本質。我正在處理的實際應用程序很複雜,儘管我可以用JavaScript來完成,但它需要更多的編碼 - 不過,這可能是唯一的解決方案。 問題:無論如何在視圖引擎使用它們之前銷燬或更改POST'd值嗎?我嘗試修改Request.Form [「TwoID」]的值,但我懷疑它是隻讀的。如果我可以說明所有POST'd值,那麼幫助者會從模型中讀取這些值作爲回退? – Guy 2010-02-07 16:51:31