【问题标题】:Combo box display only blank list组合框只显示空白列表
【发布时间】:2015-06-26 01:34:47
【问题描述】:

我正在使用 Ext.net 3.0。我有一个组合框并在其中创建了存储以从服务器端获取多个值。它从服务器端获取 5 个值,但它只显示空白列表。

组合框的编码.......

   <ext:ComboBox runat="server" ListWidth="350" ID="Branches" FieldLabel="Branch" DisplayField="Name" ValueField="Number" AllowBlank="false">
                        <Store>
                            <ext:Store runat="server">
                                <Reader>
                                    <ext:JsonReader IDProperty="Number">
                                        <Fields>
                                            <ext:RecordField Name="Number"></ext:RecordField>
                                            <ext:RecordField Name="Name"></ext:RecordField>
                                        </Fields>
                                    </ext:JsonReader>
                                </Reader>
                            </ext:Store>
                        </Store>
</ext:ComboBox>

服务器端编码.......

  var branchList = from b in Branches select new { Number = b.Number, Name =   b.Name };

  List<object> listBranchToAdd = new List<object>();
  foreach (var a in branchList)
   {
     listBranchToAdd.Add(a);
   }

  Branches.Store.Primary.DataSource = listBranchToAdd;
  Branches.Store.Primary.DataBind();

我的研究 -

  1. 有人说,不要直接在store中添加combo,通过给定的store id单独创建一个store,然后在combo中使用store id,但是不行。

  2. var branchList 返回值.. 我已经检查过了。当我使用 cmbBranches.setValue(listBranchToAdd[0]);然后它在 Fiddler 中显示值。但无法正确显示在组合框中。

3.只需在 store 中提供 storeId 并在服务器端用于在 store 中绑定数据,而不是在组合框中绑定。我试过了,还是不行。

【问题讨论】:

  • 确保在将DataSource 分配给combobox 后更新您的html。
  • 嗨 Anant,Html 正在更新。我尝试在组合框中添加静态值。
  • 所以如果你添加静态值那么你的组合框是有效的?
  • 是的,它显示值但格式不正确。我只是添加了临时来检查 html 是否正在更新。
  • 你能解决我的问题吗@AnantDabhi.?

标签: c# asp.net-mvc extjs combobox ext.net


【解决方案1】:

看看这个例子

<ext:ComboBox runat="server" ID="cmb" EmptyText="select.." ForceSelection="true" AllowBlank="false"
Editable="false" Icon="BulletTick" Flex="1" ValueField="Id" DisplayField="Name" FieldLabel="Name">
        <Store>
         <ext:Store ID="strcmb" runat="server">
              <Model>
                  <ext:Model ID="Model4" runat="server">
                     <Fields>
                      <ext:ModelField Name="Number" />
                      <ext:ModelField Name="Name" />
                     </Fields>
                  </ext:Model>
              </Model>
         </ext:Store>
    </Store>
</ext:ComboBox>

和服务器端

 strcmb.DataSource = _bll.Get();
 strcmb.DataBind();

在你的情况下,如果不发出网络服务请求,则不需要&lt;Reader&gt;&lt;ext:JsonReader...&gt; 这部分

更新

    var branchList = from b in Branches select new MyClass { Number = b.Number, Name =   b.Name };

strcmb.DataSource = branchList.ToList();
  strcmb.DataBind();
        MyClass{
        public string Name {get;set;}
        public int Number {get ;set;}
        }

【讨论】:

  • 嗨 Sakir,我试过了,但它仍然在组合中显示空白列表。
  • 你是否根据你的值(姓名,号码)改变了那些
  • 是的,我改变了。我认为,这是服务器端的错误,它也没有在 Fiddler 中显示值。我在这个变量“listBranchToAdd”中有所有值(检查我的问题)。当我直接在组合中设置值时,它会显示(格式不正确)。但我不能这样做。我想在组合中一次性绑定所有值。
【解决方案2】:

最后,我得到了这个问题的解决方案。我没有正确理解为什么它工作的实际逻辑,但它工作正常。

以前的代码 - 它不起作用

var branchList = from b in Branches select new { Number = b.Number, Name =   b.Name };

  List<object> listBranchToAdd = new List<object>();
  foreach (var a in branchList)
   {
     listBranchToAdd.Add(a);
   }

  Branches.Store.Primary.DataSource = listBranchToAdd;
  Branches.Store.Primary.DataBind();

新代码 - 正在运行

var branchList = from b in Branches select b;

      List<Branch> listBranchToAdd = new List<Branch>();
      foreach (var a in branchList)
       {
         listBranchToAdd.Add(a);
       }

      Branches.Store.Primary.DataSource = listBranchToAdd;
      Branches.Store.Primary.DataBind();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-08
    • 2013-08-06
    • 2019-03-28
    • 2014-09-01
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多