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

如何在C#代码中获取网页SelectMenu选中值?解决CS0103错误

问题:ASP.NET后台无法获取HTML下拉框选中值,报CS0103错误

CS0103 - 在MyButton_Click代码中,名称‘Column1’在当前上下文中不存在。

开发的网页包含4个HTML下拉框,点击按钮后希望在后台C#的MyButton_Click方法中输出各下拉框的选中值,但运行时出现上述错误,相关代码如下:

前端代码(.aspx)

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CarDatas.aspx.cs" Inherits="WebApplication2.CarDatas" %>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Car Datas</title>
    <link rel="stylesheet" href="https://code.jquery.com/ui/1.13.2/themes/base/jquery-ui.css">
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
        }

        h2 {
            color: #333;
        }

        label {
            display: block;
            margin-bottom: 5px;
        }

        .date-input, .column-input {
            width: 200px;
            padding: 8px;
            margin-bottom: 15px;
        }

        .calendar {
            position: absolute;
            display: none;
            background-color: #fff;
            border: 1px solid #ccc;
            box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15);
            z-index: 1000;
        }
        .custom-button {
            width: 200px; 
            height: 40px; 
            margin-top: 10px; 
            margin-bottom: 10px; 
        }

    </style>
    <script src="https://code.jquery.com/jquery-3.6.0.js"></script>
    <script src="https://code.jquery.com/ui/1.13.2/jquery-ui.js"></script>
    <script>
        $(function () {
            $(".date-input").datepicker({
                onSelect: function (dateText, inst) {
                    $(this).val(dateText);
                    $(".calendar").hide();
                }
            });

            var columnOptions = '<option value=""></option>'; 
            columnOptions +=
                '<option value="make">Make</option>' +
                '<option value="_owner">Owner</option>' +
                '<option value="center">Center</option>' +
                '<option value="subsidiary">Subsidiary</option>';

            $(".column-input").html(columnOptions);
        });

        function showCalendar(dateTextBoxId, calendarId) {
            var dateTextBox = $("#" + dateTextBoxId);
            var calendar = $("#" + calendarId);

            var rect = dateTextBox.offset();
            calendar.css({
                position: 'absolute',
                left: rect.left + 'px',
                top: rect.top + dateTextBox.outerHeight() + 'px'
            });

            if (calendar.is(":hidden")) {
                $(".calendar").hide();
                calendar.show();
            } else {
                calendar.hide();
            }
        }
    </script>
</head>
<body>
    <h2>Date and Columns Selection</h2>
    <form id="form1" runat="server">
        <label for="DateFromTextBox">Date From:</label>
        <input type="text" id="DateFromTextBox" class="date-input" onclick="showCalendar('DateFromTextBox', 'Calendar1')">
        <div id="Calendar1" class="calendar"></div>

        <label for="DateToTextBox">Date To:</label>
        <input type="text" id="DateToTextBox" class="date-input" onclick="showCalendar('DateToTextBox', 'Calendar2')">
        <div id="Calendar2" class="calendar"></div>

        <label for="Column1">Column 1:</label>
        <select id="Column1" class="column-input"></select>

        <label for="Column2">Column 2:</label>
        <select id="Column2" class="column-input"></select>

        <label for="Column3">Column 3:</label>
        <select id="Column3" class="column-input"></select>

        <label for="Column4">Column 4:</label>
        <select id="Column4" class="column-input"></select>

        <br>
        <asp:Button ID="MyButton" runat="server" Text="Click Me" OnClick="MyButton_Click" CssClass="custom-button" />

    </form>
</body>
</html>

后台代码(.aspx.cs)

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml.Linq;


namespace WebApplication2
{
    public partial class CarDatas : System.Web.UI.Page
    {
        protected void MyButton_Click(object sender, EventArgs e)
        {
            string selectedValueColumn1 = Column1.SelectedValue;
            string selectedValueColumn2 = Column2.SelectedValue;
            string selectedValueColumn3 = Column3.SelectedValue;
            string selectedValueColumn4 = Column4.SelectedValue;

            Response.Write($"Selected values: {selectedValueColumn1}, {selectedValueColumn2}, {selectedValueColumn3}, {selectedValueColumn4}");
        }
    }
}

解决方法

方法1:转为ASP.NET服务器控件

在每个<select>标签中添加runat="server"属性,让ASP.NET将其识别为服务器控件,后台即可直接通过ID访问:

修改后的下拉框代码片段:

<label for="Column1">Column 1:</label>
<select id="Column1" class="column-input" runat="server"></select>

<label for="Column2">Column 2:</label>
<select id="Column2" class="column-input" runat="server"></select>

<label for="Column3">Column 3:</label>
<select id="Column3" class="column-input" runat="server"></select>

<label for="Column4">Column 4:</label>
<select id="Column4" class="column-input" runat="server"></select>

后台代码无需修改,保持原写法即可正常获取选中值。

方法2:通过Request.Form获取表单值

若不想修改为服务器控件,可为每个<select>添加name属性,后台通过Request.Form获取提交的选中值:

修改后的下拉框代码片段:

<label for="Column1">Column 1:</label>
<select id="Column1" name="Column1" class="column-input"></select>

<label for="Column2">Column 2:</label>
<select id="Column2" name="Column2" class="column-input"></select>

<label for="Column3">Column 3:</label>
<select id="Column3" name="Column3" class="column-input"></select>

<label for="Column4">Column 4:</label>
<select id="Column4" name="Column4" class="column-input"></select>

修改后的后台代码:

protected void MyButton_Click(object sender, EventArgs e)
{
    string selectedValueColumn1 = Request.Form["Column1"];
    string selectedValueColumn2 = Request.Form["Column2"];
    string selectedValueColumn3 = Request.Form["Column3"];
    string selectedValueColumn4 = Request.Form["Column4"];

    Response.Write($"Selected values: {selectedValueColumn1}, {selectedValueColumn2}, {selectedValueColumn3}, {selectedValueColumn4}");
}

错误原因

原代码中的<select>是普通HTML控件,未添加runat="server"属性,ASP.NET不会为其生成后台控件实例,因此后台代码无法通过ID直接访问这些控件,触发CS0103上下文不存在错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:35:56