You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将下拉框选中值传递至控制器?附控制器实现代码

如何将下拉框选中的值传递回ASP.NET MVC控制器?

我在控制器中生成了一个语言选择的下拉列表,代码如下:

public ActionResult Index() {
    var title = new List<String>() { "English", "French", "Spanish" };
    List<SelectListItem> languageList = new List<SelectListItem>();
    string defaultTitle = "Language";
    foreach (var item in title) {
        languageList.Add(new SelectListItem() { Text = item, Value = item, Selected = (item == defaultTitle ? true : false) });
    }
    ViewBag.LanguageList = languageList;
    return View();
}

现在我的视图里已经渲染了这个下拉框,但不知道怎么把用户选中的字符串传递回控制器,请问该怎么做?


解决方案:两种常见的传递方式

先提个小细节:你当前代码里的defaultTitle = "Language"不会被选中,因为你的title列表里没有这个值——如果需要默认提示项,下面的代码里我会帮你补上这个设置。

方法1:表单同步提交(刷新页面)

这是最基础的实现方式,把下拉框包裹在表单中,提交后控制器通过模型绑定直接接收参数。

视图代码(Razor):
@using (Html.BeginForm("SaveLanguage", "YourControllerName", FormMethod.Post))
{
    <!-- 第三个参数是默认提示项,会生成一个空值的占位选项 -->
    @Html.DropDownList("SelectedLanguage", (IEnumerable<SelectListItem>)ViewBag.LanguageList, "Select a language", new { @class = "form-control" })
    
    <button type="submit" class="btn btn-primary mt-2">Submit</button>
}

这里的"SelectedLanguage"是表单提交时的参数名称,必须和控制器动作方法的参数名完全一致,这样MVC的模型绑定才能自动把选中值传递过去。

控制器接收代码:
[HttpPost]
public ActionResult SaveLanguage(string SelectedLanguage)
{
    // 这里就能拿到用户选中的语言值,比如"English"
    if (!string.IsNullOrEmpty(SelectedLanguage))
    {
        // 执行你的业务逻辑:比如存储到数据库、跳转结果页等
        ViewBag.SelectedLang = $"You picked: {SelectedLanguage}";
    }
    // 返回原页面或跳转到其他视图
    return View("Index");
}

方法2:AJAX异步提交(不刷新页面)

如果不想让页面整体刷新,用AJAX异步传递值是更友好的选择。

视图代码:
<!-- 给下拉框添加ID,方便JS获取选中值 -->
@Html.DropDownList("SelectedLanguage", (IEnumerable<SelectListItem>)ViewBag.LanguageList, "Select a language", new { @class = "form-control", id = "languageSelect" })

<button id="ajaxSubmitBtn" class="btn btn-primary mt-2">Submit without refresh</button>

<!-- 引入jQuery(如果项目中未引入) -->
<script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
<script>
    $(function() {
        $("#ajaxSubmitBtn").click(function() {
            // 获取下拉框选中的值
            var selectedLang = $("#languageSelect").val();
            
            // 发起AJAX请求
            $.ajax({
                url: "@Url.Action("ProcessLanguageAjax", "YourControllerName")",
                type: "POST",
                data: { SelectedLanguage: selectedLang },
                success: function(response) {
                    // 请求成功后的处理,比如显示提示信息
                    alert("Success! You selected: " + response);
                    // 也可以更新页面元素,比如$("#resultContainer").text(response);
                },
                error: function() {
                    alert("Something went wrong, please try again.");
                }
            });
        });
    });
</script>
控制器的AJAX处理方法:
[HttpPost]
public JsonResult ProcessLanguageAjax(string SelectedLanguage)
{
    if (!string.IsNullOrEmpty(SelectedLanguage))
    {
        // 执行业务逻辑,比如验证、数据存储等
        return Json(SelectedLanguage);
    }
    return Json("No language selected.");
}

额外小提醒:

  • 如果确实需要把"Language"作为默认选中项,记得把它加到你的title列表里:var title = new List<String>() { "Language", "English", "French", "Spanish" };,不然当前代码里的Selected = (item == defaultTitle ? true : false)永远不会生效。
  • 参数名称严格区分大小写,一定要保证视图和控制器中的参数名完全一致!

内容的提问来源于stack exchange,提问作者refresh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:14:04