c# - ASP.NET MVC DropDownListFor 在回发时返回 null

标签 c# .net asp.net-mvc dropdownlistfor

我想问一个非常简单的问题,我正在创建一个简单的 MVC 应用程序来测试下拉功能, Controller 中有 2 个操作方法,一个用于 GET,另一个用于 POST。我想使用 HTML 表单助手回发从下拉列表中获取选定的值。这是我的 M、V 和 C;

型号:

public class Programming
      {
           public int selectedId { get; set; }

            public List<SelectListItem> languanges;
      }

Controller :

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 操作处放置一个断点,我会得到 languages null!为什么会这样?

最后以空异常结束。

谢谢

最佳答案

你必须不在 Index 方法中赋值 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"},
        };
        programming.languanges = list;
      }

请注意:您在 post 方法中的参数与您的全局变量同名,因此您隐藏了它。在 Post 方法中,您应该返回带有模型的 View 以在其中显示列表。

[HttpPost]
public ActionResult Index(Programming par)
{
    return View(programming);
}

关于c# - ASP.NET MVC DropDownListFor 在回发时返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32560999/

相关文章:

c# - LINQ to SQL 连接中的 DefaultIfEmpty() 导致重复

javascript - 谷歌标签管理器给出混合内容错误

java - Django 或 RoR,如常见的 Java 或 ASP 网络框架

c# - 创建 Action<T>,其中 T 是方法参数的基类

c# - 使用 C# 在 WCF 中同时访问 PerSession 服务

c# - PRISM + MEF -- 无法让区域正常工作

c# - .NET DataGridView 显示对象字段

c# - 使用 LINQ 查询获取索引值的集合

c# - 具有多个键和每个键的多个值的字典

c# - 在 MVC 站点上,您可以优先考虑 IIS 中的 Url Rewrite 模块以覆盖 MVC 路由吗?