C# 在这种情况下,如何从asp.net中的下拉控件中获取值?

C# 在这种情况下,如何从asp.net中的下拉控件中获取值?,c#,asp.net,drop-down-menu,C#,Asp.net,Drop Down Menu,我的设想是: 我有一个asp.net页面,该页面带有产品列表的下拉控件。在数据库中,“我的产品”表中有ProductId、ProductName和Price等字段。其中,我已使用此方法填充此下拉控件: private void FillProducts() { List<Product> productList = objProductManager.GetProducts(); if (productL

我的设想是: 我有一个asp.net页面,该页面带有产品列表的下拉控件。在数据库中,“我的产品”表中有ProductId、ProductName和Price等字段。其中,我已使用此方法填充此下拉控件:

   private void FillProducts()
            {

            List<Product> productList = objProductManager.GetProducts();
            if (productList.Count > 0)
                {
                drpProducts.DataSource = productList;
                drpProducts.DataTextField = "ProductName";
                drpProducts.DataValueField = "ProductId";

                drpProducts.DataBind();
                }
            }
private void FillProducts()
{
List productList=objProductManager.GetProducts();
如果(productList.Count>0)
{
drpProducts.DataSource=productList;
drpProducts.DataTextField=“ProductName”;
drpProducts.DataValueField=“ProductId”;
drpProducts.DataBind();
}
}
这是完美的工作。但我想在客户端获得选定的产品价格值。为此,我不想在服务器上来回得到那个。除了DataTextFeild或DataValueField之外,下拉控件的任何属性是否可以保存产品的价格字段?这样我就可以避免回到服务器上。或提出任何补救措施。
请指导我。

一般来说,在任何web应用程序中实现这一点的一种简单方法是在页面中包含一个[ProductId,ProductPrice]数组,独立于下拉列表,并在客户端JavaScript中与您当前的ProductId值结合使用

您可以始终包含第二个下拉列表,其中包含ProductID价格关系,hide正在使用css


这就好像您有一个主子表关系,但有两个下拉列表。这只是一个使用jQuery操作下拉列表的问题,全局变量和会话变量就是在这里发生的

Web环境中,您可以同时拥有跨用户的全局变量(可以缓存整个产品列表)或只能用于该用户会话的会话变量

您的方法如下所示:

public MyPMan objProductManager = new MyPMan();

public List<Product> ProductList 
{
    get
    {
        if(Session["MyApp-ProductList"] == null)
            Session["MyApp-ProductList"] = objProductManager.GetProducts();
        return (List<Product>)Session["MyApp-ProductList"];
    }
}

private void FillProducts()
{

    //List<Product> productList = objProductManager.GetProducts();
    if (this.ProductList.Count > 0)
    {
        drpProducts.DataSource = this.ProductList;
        drpProducts.DataTextField = "ProductName";
        drpProducts.DataValueField = "ProductId";

        drpProducts.DataBind();
    }
}
这样,每个会话只需查询一次DB,而且它在整个网站上都是可用的。我的建议是,您创建一个静态业务对象,以便随时随地都可以使用:)

例如,您可以将此作为第一行

if (MyStaticObject.ProductList.Count > 0)
如果要跨会话和用户获取产品列表,请使用
Application
变量,并在
global.asax
文件中进行设置


已添加

如何使用以下方法进行客户端验证:

我喜欢jQuery验证,因为它是最简单、最出色的客户端验证工具,非常酷,甚至连Microsoft现在都在ASP.NET MVC 2上使用,在MVC3中使用更多;)

您可以轻松地将值从ASP.NET传递到Javascript,如下所示:

var myJavaScriptVariable = '<%= myAspVariable %>';
ASP.NET WebForms中的(使用JSon.NET)

还有更多的技巧,但我希望这些技巧能有所帮助


请记住,我仍然强烈建议您使用内置的ASP.NET控件验证,因为如果您使用
gridview
使用
RowDataBound
事件来构建您的内容,那么您将获得现成的验证。

我更喜欢这里的ajax解决方案。除了Microsoft自己的UpdatePanel之外,还有一个javascript/ajax/json调用,它将dropbox中的选定值发送回服务器,而无需重新加载。

您可以用product Price替换ProductId,并在javascript中获取dropdownlist的SelectedValue,这非常有趣。。。。!如果我使用产品id,事实上产品id和名称在代码隐藏中使用。你的意思是说我必须以数组形式在应用程序级别维护产品价格,以便我可以选择所选产品id的价格吗?但是,如果我添加了新产品,该怎么办呢?我不这么认为,我必须维护另一个控件,这将使我的页面加权以加载。我认为在这种情况下,性能将是一个问题。是吗?这肯定不会让你的页面变得更轻松,这是真的,但大多数可能的解决方案可能都是这样。在一天结束时,这将意味着在你的页面中保留一个额外的值列表。。。一个gol-ol'Ajax请求怎么样?坦率地告诉你,这将是一个错误的方法来修复目标。我真的印象深刻,我认为这是一个很好的解决方案。但我用这个价格来验证。另外还有一个文本框,如“支付金额”和“产品数量”。这里我想检查一下,填写的金额应该正好等于输入的产品数量的倍数。假设一支笔是10美元,笔的数量是4,那么他必须填写40美元。像这样的场景。我知道我可以通过java脚本进行自定义验证。但同样的问题是如何在javascript中访问应用程序变量/会话变量?你明白我的意思了吗?添加了客户端验证想法,因为我不知道你在做什么。算了吧,告诉我如何访问javascript中保存产品列表的会话变量?添加了如何创建产品列表的JSON对象。不知怎的,我无法访问javascript中的会话值getting')预期错误。关于var productPrice='',你能告诉我为什么要这样吗?是的……我认为这是最好的方法之一。什么?再打一次电话来做你已有的事情?不!!
var myJavaScriptVariable = '<%= myAspVariable %>';
var jsonMVC = @Html.Raw(Json.Encode(reg));
var jsonWebForms = <%= Newtonsoft.Json.JsonConvert.SerializeObject(MyStaticObject.ProductList) %>;
var product = jsonMVC[0];
alert(product.Price);