C# DropdownList在MVC中是如何工作的?

C# DropdownList在MVC中是如何工作的?,c#,asp.net,asp.net-mvc,drop-down-menu,webforms,C#,Asp.net,Asp.net Mvc,Drop Down Menu,Webforms,我使用过Webform DropDownList,发现MVC DropDownList有点令人困惑: 问题: 让MVC dropdownlist为indexchange列出服务器端事件,然后选择EditemChange作为WebForms 如何在控制器中获取dropdownList selecteditems的文本和值(据我所知,我只能在控制器中获取选定值,而不能获取文本) 您必须记住,在ASP.NET web窗体中可以执行的所有操作都可以在ASP.NET MVC中执行。唯一的区别是到达

我使用过Webform DropDownList,发现MVC DropDownList有点令人困惑:

问题:

    • 让MVC dropdownlist为indexchange列出服务器端事件,然后选择EditemChange作为WebForms
    • 如何在控制器中获取dropdownList selecteditems的文本和值(据我所知,我只能在控制器中获取选定值,而不能获取文本)

  • 您必须记住,在ASP.NET web窗体中可以执行的所有操作都可以在ASP.NET MVC中执行。唯一的区别是到达目的地的过程。以下是您的问题的答案:

  • 简单的答案是否定的。如果您想通知服务器更改,您需要使用javascript处理更改,并对服务器进行ajax调用
  • 您可以在控制器中获取下拉项的文本和值
  • 下面是代码示例:

    控制器:

    public class HomeController : Controller
    {
        public ActionResult DropExample()
        {
            var fruits = new List<SelectListItem>();
            fruits.Add(new SelectListItem { Text = "Orange", Value = "1" });
            fruits.Add(new SelectListItem { Text = "Banana", Value = "2" });
            fruits.Add(new SelectListItem { Text = "Grapes", Value = "3" });
    
            ViewBag.Fruits = fruits;
    
            return View();
        }
    
        public JsonResult GetJsonData(string value,string text)
        {
            System.Diagnostics.Debugger.Break();
            string message = String.Format("You have selcted - {0}({1}).This is from the server...",text,value);
            return Json(new {Message = message }, JsonRequestBehavior.AllowGet);
        }
    }
    
    <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js' type="text/javascript"></script>
    <script type="text/javascript">
        $(function () {
            $('#fruit').change(function () {        
                var value = $(this).val();
                var text = $(this).find("option:selected").text();
    
                var message = "You selcted - " + text + "(" + value + ").Now let's notify the server...";
                alert(message);
    
                $.getJSON("/Home/GetJsonData?value=" + value + "&text=" + text, null, function (data) {
                    $("#result").empty();
                    $("#result").html(data.Message);
                });
    
            });
    
        });
    </script>
    @Html.DropDownList("fruit", ViewBag.Fruits as List<SelectListItem>)
    <div id="result"></div>
    
    公共类HomeController:控制器
    {
    公共行动结果示例()
    {
    var fruits=新列表();
    添加(新的SelectListItem{Text=“Orange”,Value=“1”});
    添加(新的SelectListItem{Text=“Banana”,Value=“2”});
    添加(新的SelectListItem{Text=“Grapes”,Value=“3”});
    ViewBag.Fruits=水果;
    返回视图();
    }
    公共JsonResult GetJsonData(字符串值、字符串文本)
    {
    System.Diagnostics.Debugger.Break();
    string message=string.Format(“您已选择-{0}({1})。这是来自服务器…”,文本,值);
    返回Json(新的{Message=Message},JsonRequestBehavior.AllowGet);
    }
    }
    
    查看:

    public class HomeController : Controller
    {
        public ActionResult DropExample()
        {
            var fruits = new List<SelectListItem>();
            fruits.Add(new SelectListItem { Text = "Orange", Value = "1" });
            fruits.Add(new SelectListItem { Text = "Banana", Value = "2" });
            fruits.Add(new SelectListItem { Text = "Grapes", Value = "3" });
    
            ViewBag.Fruits = fruits;
    
            return View();
        }
    
        public JsonResult GetJsonData(string value,string text)
        {
            System.Diagnostics.Debugger.Break();
            string message = String.Format("You have selcted - {0}({1}).This is from the server...",text,value);
            return Json(new {Message = message }, JsonRequestBehavior.AllowGet);
        }
    }
    
    <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js' type="text/javascript"></script>
    <script type="text/javascript">
        $(function () {
            $('#fruit').change(function () {        
                var value = $(this).val();
                var text = $(this).find("option:selected").text();
    
                var message = "You selcted - " + text + "(" + value + ").Now let's notify the server...";
                alert(message);
    
                $.getJSON("/Home/GetJsonData?value=" + value + "&text=" + text, null, function (data) {
                    $("#result").empty();
                    $("#result").html(data.Message);
                });
    
            });
    
        });
    </script>
    @Html.DropDownList("fruit", ViewBag.Fruits as List<SelectListItem>)
    <div id="result"></div>
    
    
    $(函数(){
    $('#fruit').change(函数(){
    var值=$(this.val();
    var text=$(this).find(“选项:选定”).text();
    var message=“您选择了-“+text+”(“+value+”)。现在让我们通知服务器…”;
    警报(信息);
    $.getJSON(“/Home/GetJsonData?value=“+value+”&text=“+text,null,函数(数据){
    $(“#结果”).empty();
    $(“#结果”).html(data.Message);
    });
    });
    });
    @Html.DropDownList(“水果”,ViewBag.Fruits作为列表)
    

    在ASP.NET web窗体中,为了快速开发应用程序,服务器端的事件和控件被破坏了,但每次我们需要稍微更改事件或控件的外观和行为时,都会遇到麻烦。在MVC中,我们没有这个问题,因为我们完全控制了HTML生成后,一开始用MVC的方式做事情似乎要做很多工作,但当你从客户那里收到非常定制的需求时,它会带来巨大的好处。这就是MVC如此受欢迎的主要原因之一

    文本独特吗?如果是这样,是否可以将值字段设置为文本?A
    提交其所选
    元素的
    值。如果要提交“丹麦”或“Sverig”等,请将
    SelectListItem
    Value
    属性设置为-
    newselectListItem{Text=“Danmark”,Value=“Danmark”},
    等非常有趣-1-但是您的代码中写有“ViewBag.Fruits as List”,这是必要的。我认为从视图对象自动加载数据的下拉列表-2-您已经创建了一个函数-publicJSONResult GetJsonData(字符串值,字符串文本),我们如何使用它在页面上显示数据或保存在数据库中?现在,您的Javascript在站点上显示数据。在你回答之后,我结束这个问题。我不会为你写所有的代码。我已经回答了你的问题,并向你展示了代码示例。如果你想知道如何在数据库中插入值,那么先用谷歌搜索它,然后自己努力找出答案。只有当你做起来有问题时,才在堆栈上问一个新问题过度担忧。。现在我明白你的代码了。我现在知道如何将数据保存到数据库。但你可以告诉我为什么要写ViewBag.Frients作为列表。。。为什么是nessery?这只是MVC中绑定下拉列表的一种方法。您不必这样做。您可以创建一个模型并将其传递给视图,然后将模型上的属性绑定到下拉列表。有关绑定到MVC中下拉列表的各种方法,请参阅本文-