【问题标题】:ASP.NET MVC 2 - How can I get the selected value from a drop down into my view model?ASP.NET MVC 2 - 如何从下拉列表中获取所选值到我的视图模型中?
【发布时间】:2010-05-29 02:56:48
【问题描述】:

我正在通过

创建一个下拉菜单

<%= Html.DropDownList("data.Language", Model.LanguageOptions) %>

并希望通过自动模型绑定将其值读回我的 LanguageModel 视图模型:

public ActionResult Save(LanguageModel data)

但是,调用 Save 方法时 data.Language 为 null。

如何从 data.Language 下拉列表中获取所选值到 data.Language?

【问题讨论】:

    标签: c# asp.net-mvc drop-down-menu html-helper


    【解决方案1】:

    我不知道你的控制器动作和模型是什么样的,但这绝对有效:

    型号:

    public class LanguageModel
    {
        public string Language { get; set; }
        public IEnumerable<SelectListItem> LanguageOptions
        {
            get
            {
                return new[] 
                {
                    new SelectListItem { Value = "en", Text = "English" },
                    new SelectListItem { Value = "fr", Text = "French" },
                };
            }
        }
    }
    

    控制器:

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View(new LanguageModel());
        }
    
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Index(LanguageModel data)
        {
            return View(data);
        }
    }
    

    查看:

    <% using (Html.BeginForm()) { %>
        <%= Html.DropDownList("Language", Model.LanguageOptions) %>
        <input type="submit" value="OK" />
    <% } %>
    
    <div><%= Html.Encode(Model.Language) %></div>
    

    当然,如果您使用的是 ASP.NET MVC 2.0,则最好使用强类型的 DropDownListFor 帮助器。

    【讨论】:

    • 看来我的问题比这更大。我使用 FireBug 来检查这些值,它们实际上是正确提交的。我的操作方法中没有任何内容(ViewData 不包含任何内容)。一旦我发现这是根本问题,就会在这里问一个单独的问题:stackoverflow.com/questions/2931805/…
    • 您希望在回发的 ViewData 中找到什么?它用于控制器将数据发送到视图,反之亦然。查看Request["data1"] 甚至更好的控制器动作的参数。
    【解决方案2】:

    删除数据。

    <%= Html.DropDownList("Language", Model.LanguageOptions) %>
    

    或者试试:

    <%= Html.DropDownListFor(m => m.Language, Model.LanguageOptions) %>
    

    (尽管 m.Langage 可能不正确 - 这取决于您的视图模型的设置方式)

    【讨论】:

    • 如何反向执行相同的过程,即从ViewController
    猜你喜欢
    • 2012-12-31
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多