![](/img/trans.png)
[英]How to change a DropDownListFor value back to null with javascript on ASP.NET - MVC?
[英]ASP.NET MVC DropDownListFor returns null on post back
我想問一個非常簡單的問題,即我正在創建一個簡單的MVC應用程序來測試下拉功能,控制器中有2個操作方法,一個用於GET,另一個用於POST。 我想使用HTML表單助手回發從下拉列表中獲取所選值。 這是我的M,V和C;
模型:
public class Programming
{
public int selectedId { get; set; }
public List<SelectListItem> languanges;
}
控制器:
public class HomeController : Controller
{
private Programming programming;
private List<SelectListItem> list;
public HomeController()
{
programming = new Programming();
programming.languanges = new List<SelectListItem>();
list = new List<SelectListItem>() {
new SelectListItem(){ Value="1", Text="ActionScript"},
new SelectListItem(){ Value="2", Text="AppleScript"},
new SelectListItem(){ Value="3", Text="Asp"},
new SelectListItem(){ Value="4", Text="BASIC"},
new SelectListItem(){ Value="5", Text="C"},
new SelectListItem(){ Value="6", Text="C++"},
new SelectListItem(){ Value="7", Text="Clojure"},
new SelectListItem(){ Value="8", Text="COBOL"},
new SelectListItem(){ Value="9", Text="ColdFusion"},
new SelectListItem(){ Value="10", Text="Erlang"},
new SelectListItem(){ Value="11", Text="Fortran"},
new SelectListItem(){ Value="12", Text="Groovy"},
new SelectListItem(){ Value="13", Text="Haskell"},
new SelectListItem(){ Value="14", Text="instinctcoder.com"},
new SelectListItem(){ Value="15", Text="Java"},
new SelectListItem(){ Value="16", Text="JavaScript"},
new SelectListItem(){ Value="17", Text="Lisp"},
new SelectListItem(){ Value="18", Text="Perl"},
new SelectListItem(){ Value="19", Text="PHP"},
new SelectListItem(){ Value="20", Text="Python"},
new SelectListItem(){ Value="21", Text="Ruby"},
new SelectListItem(){ Value="22", Text="Scala"},
new SelectListItem(){ Value="23", Text="Scheme"},
};
}
// GET: Home
public ActionResult Index()
{
programming.languanges = list;
return View(programming);
}
[HttpPost]
public ActionResult Index(Programming programming)`enter code here`
{
return View();
}
}
視圖:
@model BSTNTest.Models.Programming
@{
ViewBag.Title = "Index";
}
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
@Html.DropDownListFor(c => c.selectedId, Model.languanges)
<button type="submit" class="btn btn-primary">Submit</button>
}
如果我在post動作中設置斷點,我會將語言設為null! 為什么會這樣?
最后得到一個null異常。
謝謝
您必須在構造函數中將List不在Index方法中,而是在創建它的位置:
public HomeController()
{
programming = new Programming();
programming.languanges = new List<SelectListItem>();
list = new List<SelectListItem>() {
new SelectListItem(){ Value="1", Text="ActionScript"},
new SelectListItem(){ Value="2", Text="AppleScript"},
new SelectListItem(){ Value="3", Text="Asp"},
new SelectListItem(){ Value="4", Text="BASIC"},
new SelectListItem(){ Value="5", Text="C"},
new SelectListItem(){ Value="6", Text="C++"},
new SelectListItem(){ Value="7", Text="Clojure"},
new SelectListItem(){ Value="8", Text="COBOL"},
new SelectListItem(){ Value="9", Text="ColdFusion"},
new SelectListItem(){ Value="10", Text="Erlang"},
new SelectListItem(){ Value="11", Text="Fortran"},
new SelectListItem(){ Value="12", Text="Groovy"},
new SelectListItem(){ Value="13", Text="Haskell"},
new SelectListItem(){ Value="14", Text="instinctcoder.com"},
new SelectListItem(){ Value="15", Text="Java"},
new SelectListItem(){ Value="16", Text="JavaScript"},
new SelectListItem(){ Value="17", Text="Lisp"},
new SelectListItem(){ Value="18", Text="Perl"},
new SelectListItem(){ Value="19", Text="PHP"},
new SelectListItem(){ Value="20", Text="Python"},
new SelectListItem(){ Value="21", Text="Ruby"},
new SelectListItem(){ Value="22", Text="Scala"},
new SelectListItem(){ Value="23", Text="Scheme"},
};
programming.languanges = list;
}
並且要小心:你的post方法參數與全局變量同名,所以你要隱藏它。 在Post方法中,您應該返回帶有模型的視圖以在其中包含列表。
[HttpPost]
public ActionResult Index(Programming par)
{
return View(programming);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.