Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 59

0
votes
answers
18 views
+10

SQL Server不能執行

1

有一個在我的數據庫中的問題,當我執行此:SQL Server不能執行

<asp:SqlDataSource ID="SqlDataSourceCombine" runat="server" 
    ConnectionString="<%$ ConnectionStrings:DefaultConnection %>" 
    DeleteCommand="DELETE FROM [Product] WHERE [ProductId] = @ProductId" 
    InsertCommand="INSERT INTO [Product] ([ProductName], [ProductDescription], [ProductCategory], [ProductBrand], [ProductPrice], [ProductQty], [ProductUploadDate]) VALUES (@ProductName, @ProductDescription, @ProductCategory, @ProductBrand, @ProductPrice, @ProductQty, @ProductUploadDate)" 
    SelectCommand="SELECT Product.*, ProductCategory.*, ProductBrand.* 
        FROM Product 
        INNER JOIN ProductCategory AS PC ON Product.ProductCategory = ProductCategory.CategoryId  
        INNER JOIN ProductBrand AS PB ON Product.ProductBrand = ProductBrand.BrandId" 
    UpdateCommand="UPDATE [Product] SET [ProductName] = @ProductName, 
         [ProductDescription] = @ProductDescription, 
         [ProductCategory] = @ProductCategory, 
         [ProductBrand] = @ProductBrand, 
         [ProductPrice] = @ProductPrice, 
         [ProductQty] = @ProductQty, 
        WHERE [ProductId] = @ProductId"> 
</asp:SqlDataSource> 

我得到這個錯誤:

enter image description here

+0

在'的ConnectionStrings:DefaultConnection',你有'初始Catalog'集?如果是這樣,是否設置爲'[Product]'表所在的相同數據庫? 'dbo'模式中的'[Product]'表? – tarheel

沙发
0
0

你必須在指定的查詢中多次失誤。

  • 首先,您的SELECT查詢使用Product就在上次內連接之前,這是錯誤的語法。因此,對select命令使用以下查詢。

SELECT查詢

SELECT product.*, 
     productcategory.*, 
     productbrand.* 
FROM product 
     INNER JOIN productcategory 
       ON product.productcategory = productcategory.categoryid 
     INNER JOIN productbrand 
       ON product.productbrand = productbrand.brandid 
  • 其次,你的UPDATE查詢剛剛WHERE這又是錯誤的語法前的逗號。使用下面的查詢更新命令。

更新查詢

UPDATE [product] 
SET [productname] = @ProductName, 
     [productdescription] = @ProductDescription, 
     [productcategory] = @ProductCategory, 
     [productbrand] = @ProductBrand, 
     [productprice] = @ProductPrice, 
     [productqty] = @ProductQty 
WHERE [productid] = @ProductId 

你最終的標記應該是如下。

的SqlDataSource與修正查詢

<asp:SqlDataSource ID="SqlDataSourceCombine" runat="server" ConnectionString="<%$ ConnectionStrings:DefaultConnection %>" 
    DeleteCommand="DELETE FROM [Product] WHERE [ProductId] = @ProductId" 
    InsertCommand="INSERT INTO [Product] ([ProductName], [ProductDescription], [ProductCategory], [ProductBrand], [ProductPrice], [ProductQty], [ProductUploadDate]) VALUES (@ProductName, 
     @ProductDescription, @ProductCategory, @ProductBrand, @ProductPrice, @ProductQty, @ProductUploadDate)" 
    SelectCommand="SELECT product.*, productcategory.*, 
    productbrand.* FROM product 
    INNER JOIN productcategory 
    ON product.productcategory = productcategory.categoryid 
    INNER JOIN productbrand 
    ON product.productbrand = productbrand.brandid " 
    UpdateCommand="UPDATE [product] 
    SET [productname] = @ProductName, 
    [productdescription] = @ProductDescription, 
    [productcategory] = @ProductCategory, 
    [productbrand] = @ProductBrand, 
    [productprice] = @ProductPrice, 
    [productqty] = @ProductQty 
    WHERE [productid] = @ProductId "> 
</asp:SqlDataSource> 
0
votes
answers
14 views
+10

Get url without querystring

I have a URL like this:

http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye

I want to get http://www.example.com/mypage.aspx from it.

Can you tell me how can I get it?

沙发
0

simple example would be using substring like :

string your_url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
string path_you_want = your_url .Substring(0, your_url .IndexOf("?"));
板凳
0

I've created a simple extension, as a few of the other answers threw null exceptions if there wasn't a QueryString to start with:

public static string TrimQueryString(this string source)
{ 
    if (string.IsNullOrEmpty(source))
            return source;

    var hasQueryString = source.IndexOf('?') != -1;

    if (!hasQueryString)
        return source;

    var result = source.Substring(0, source.IndexOf('?'));

    return result;
}

Usage:

var url = Request.Url?.AbsoluteUri.TrimQueryString() 
地板
0
    string url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
    string path = url.split('?')[0];

我沒有做過任何性能測試。我主要是圖表和單頁報告,因此吞吐量對我來說不是問題。但它似乎和託管代碼一樣快。 - cdonner 2009年2月12日4:11

@Jason Kealey:這真是這篇文章的最佳答案 - 導出與SpreadsheetML無關。數據都可以從文件中訪問。如果您需要不同格式的數據,請通過XSLT或Linq提供轉換。 - 托德主於2010年4月28日6:23

@Otaku--理智的聲音!:D - 匿名類型2010年11月3日在3:39

但這根本不適用於“.xls”文件。 - 12月5日30日19:14的quillbreaker

4楼
-10
var canonicallink = Request.Url.Scheme + "://" + Request.Url.Authority + Request.Url.AbsolutePath.ToString();

工作正常,但它是根據GPL許可的 - 例如,任何使用它的軟件也必須以普通的源代碼提供....並不總是一個好的選擇...... - marc_s 2010年12月13日18:20

以便於您的原生格式導出,編寫編程。使用EPPlus轉換為Excel,使其免費。使你的主程序使用默認,但允許其他“插件”,嘿presto你的真實代碼是免費的GPL。 - user159335 11年11月3日16:01

現在看來它已經在LGPL下獲得許可,因此您可以將其用作沒有cop​​yleft限制的鏈接庫。 - 布拉德R 12年2月22日在1:42

請注意,如果您需要生成一個包含大字符串的excel文件,則此庫可能會在Excel中隨機生成“不可讀內容”錯誤。 - Kevin Laity 2014年1月30日18:50

請注意EPPlus洩漏內存,對於大量數據並不是很好。 - user3285954 2015年5月17日21:30

5楼
-20

Try this:

urlString=Request.RawUrl.ToString.Substring(0, Request.RawUrl.ToString.IndexOf("?"))

from this: http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye you'll get this: mypage.aspx

我喜歡這個名字的諷刺...... - Jagd 12年1月18日15:45

使用它以及相同的經驗。效果很好,非常靈活。 - AnthonyVO於2012年8月8日14:53

6楼
-20
this.Request.RawUrl.Substring(0, this.Request.RawUrl.IndexOf('?'))

這個答案與2014年7月的答案基本相同嗎? - Wai Ha Lee 2015年9月30日14:16

@Joe Erickson:你能說一下如何讀取CSV,然後使用Spreadsheet設備讀取CSV中的XML並使用該XLS生成包含該結構的結果XML文件嗎?或者我們可以使用Spreadsheetgear直接從CSV生成XML嗎? - AnkitSablok 2015年12月2日19:21

0
votes
answers
21 views
+10

ASP.NET Postback創建一個新線程和一個新會話

1

我沒有維護線程或會話,但是由於創建了一個新線程,定義的變量在回發期間丟失。思考?ASP.NET Postback創建一個新線程和一個新會話

每次單擊button1或button2時,currentthreadid和sessionid都會更改。我更關心正在創建的新線程。請幫助 !

這裏是我的WebForm1.aspx的代碼

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

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <asp:ScriptManager ID="ScriptManager1" EnablePartialRendering="true" runat="server"></asp:ScriptManager> 
     <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
      <ContentTemplate> 
       <asp:Label ID="Label1" runat="server" Text="Before Click" /> 
       <asp:Button ID="Button1" runat="server" Text="Button1" OnClick="Button1_Click" CausesValidation="false"/> 
      </ContentTemplate> 
      <Triggers> 
       <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" /> 
      </Triggers> 
     </asp:UpdatePanel> 
     <asp:Button ID="Button2" runat="server" Text="Button2" OnClick="Button2_Click"/> 
    </form> 
</body> 
</html> 

這裏是我的WebForm1.aspx.cs中的代碼

namespace UpdatePanelTest2 
{ 
    public partial class WebForm1 : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

      string currentthreadid = AppDomain.GetCurrentThreadId().ToString(); 
      string sessionid = Session.SessionID; 

      if (IsPostBack) { } 
      if (IsAsync) { } 
      if (IsPostBackEventControlRegistered) { } 

      if (ScriptManager1.IsInAsyncPostBack) { } 
     } 

     protected void Page_Init(object sender, EventArgs e) 
     { 

     } 

     protected void Button1_Click(object sender, EventArgs e) 
     { 
      this.Label1.Text = "After Click"; 
     } 

     protected void Button2_Click(object sender, EventArgs e) 
     { 

     } 
    } 
} 

我的web.config文件

<?xml version="1.0"?> 

<!-- For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId=169433 --> 

<configuration> 
    <system.web> 
     <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 

</configuration> 

UPDATE

的原因,我需要的是同一個線程用於回傳要求,因爲我保持一定的變量,然後再利用這些變量對當前池線程

代碼:

private static readonly ThreadLocal<PageContext> _context = new ThreadLocal<PageContext>(typeof(PageContext), "_context", true); 
     private string[] _path; 

     public static PageContext ForCurrentThread 
     { 
      get { return _context.Value ?? (_context.Value = new PageContext()); } 
     } 

public void Initialize(HttpRequest _request) 
     { 
somestring = null; 
} 

public string somestring { get; set; } 

當頁面加載第一次,somestring被賦予一個值,其他的類然後使用相同的上下文並重新使用somestring的值。如果爲回發請求創建了新線程,這不起作用。

+0

無法理解您的問題。您只想存儲一次值? –

+0

還有一個類似的線程 - 請按照下面的鏈接。 http://stackoverflow.com/questions/222999/how-to-persist-variable-on-postback – meghlashomoy

+0

你想保持什麼變量? – smoksnes

沙发
0
2

這是設計。 SessionID將不會保存,直到您真正使用它。

https://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.sessionid.aspx

當使用基於cookie的會話狀態,ASP.NET不用於會話的數據,直到會話對象用於分配 存儲。作爲 結果,會爲每個頁面請求生成新的會話ID,直到訪問會話對象 。

如果您添加到您的代碼中的SessionID將保持不變:

Session["foo"] = 1; 

ASP.Net並不能保證你得到每個請求的相同的線程。該應用程序與多個線程一起工作,它將從線程池中獲取線程並使用它來處理請求。

我會說這沒什麼可擔心的。

我會避免存儲特定線程的東西。沒有辦法知道你是否會在下一個請求中獲得相同的線程。不應該爲特定用戶存儲值(例如會話)嗎?

public static PageContext ForCurrentSession 
{ 
    get 
    { 
     if(Session["PageContext"] == null) 
     { 
      Session["PageContext"] = new PageContext(); 
     } 
     return Session["PageContext"] as PageContext; 
    } 
} 
+0

謝謝!我認爲這整個方法是錯誤的...如果我使用會話,然後在負載平衡的環境中,我需要一個數據庫。我會改變它的工作方式。文本變量作爲餅乾和靜態集合/列表... –

+0

是的,我認爲這是一個很好的idéa。 Hanselman有一個關於Session和多個服務器的好博客。 http://www.hanselman.com/blog/LoadBalancingAndASPNET.aspx – smoksnes

+0

ASP.Net甚至不保證單個請求將被單個線程處理 - 它可以在運行通過頁面生存期事件時在線程之間跳轉,並且如果請求處理程序是異步的(傳統風格或'async' /'await')。 –

0
votes
answers
18 views
+10

AdLock在剃刀頁

-2

的等效性我正在研究一個.Net Razor網頁,我想知道如何阻止讀取註冊表(以前我在AdO中使用AdLockOptimistic),直到更新完成,我的代碼是...AdLock在剃刀頁

 var sqlLeeUsr = "SELECT UsrSmlla FROM tbUsr WHERE ([email protected])"; 
     var usr = db.QuerySingle(sqlLeeUsr, intUsrNro); 
     if (usr != null) 
     { 
      intSecuencia = usr.UsrSmlla + 1; 

      var sqlModUsr = "UPDATE tbUsr SET [email protected] FROM tbUsr WHERE ([email protected])"; 
      db.Execute(sqlModUsr, intSecuencia, intUsrNro); 
     } 
+0

'我想知道如何阻止讀取註冊表(以前我在ADO中使用過AdLockOptimistic)'我不明白你的意思。這種情況下的「註冊表」是什麼?你的代碼現在做什麼?你想要它做什麼呢? – mjwills

+0

我只想管理表tbUsr中的併發。我從這個表(tbUsr)中取出最後一個序列(UsrSmlla),然後給這個序列加上1,並保存在intSecuencia中,最後我用intSecuencia中的值更新字段UsrSmlla。我希望其他人在上一個過程完成時能夠訪問相同的註冊表。 –

+0

請參閱AdLockOptimistic在... https://www.w3schools.com/asp/prop_rs_locktype.asp –

沙发
0
0

,而不是查詢的值,然後遞增它,你應該在一個做了兩次手術。那樣的話,每次調用都會肯定得到一個唯一的值。

要執行的代碼可能是:

var sqlLeeUsr = "UPDATE tbUsr SET UsrSmlla=UsrSmlla+1 
    FROM tbUsr 
    OUTPUT INSERTED.UsrSmlla 
    WHERE ([email protected])"; 
var changed = db.QuerySingle(sqlLeeUsr, intUsrNro); 

這將更新表並返回新(增量)值。

0
votes
answers
15 views
+10

MVC/Entity Framework編輯動作

0

我不明白爲什麼這個結果會一直返回null。我知道ID 100存在於數據庫中。我正在創建可以存儲到數據庫中的在線表單。我希望能夠通過ID將他們拉回來更新信息。MVC/Entity Framework編輯動作

public ActionResult reviewPreevent(int? id) 
{ 
    id = 100; 
    if (id.HasValue) 
    { 
     using(formEntities db = new formEntities()) { 
      var form = (from a in db.form_preevent 
       select new preeventForm 
       { 
        id = a.id, 
        meeting = a.meeting, 
        date = (DateTime)a.eventDate, 
        location = a.location, 
        p1Foyer = (bool)a.p1Foyer, 
        p2Foyer = (bool)a.p2Foyer, 
        meetingRoom = (bool)a.meetingroom, 
        skRoom = (bool)a.skroom, 
        kk1 = (bool)a.kk1, 
        kk2 = (bool)a.kk2, 
        nursery = (bool)a.nursery, 
        Sanctuary = (bool)a.sanctuary, 
        kitchen = (bool)a.kitchen, 
        parkingLot = (bool)a.parkinglot, 
        mainLeaders = a.mainleaders, 
        helpers = a.helpers, 
        backup = a.backuphelps, 
        soundboard = (bool)a.soundboard, 
        soundboardtech = a.soundboardtech, 
        projector = (bool)a.projector, 
        projectorOp = a.projectorop, 
        camera = (bool)a.camera, 
        cameraops = a.cameraops, 
        livestream = (bool)a.livestream, 
        ushers = (bool)a.ushers, 
        totalUshers = (int)a.totalushers, 
        greeters = (bool)a.greeters, 
        totalGreeters = (int)a.totalgreeters, 
        security = (bool)a.security, 
        setupTime = (DateTime)a.setuptime, 
        setup = a.setup, 
        breakdown = a.breakdown, 
        foodItems = a.fooditems, 
        groceryShoppers = a.groceryshoppers, 
        foodPrepPersonal = a.foodprep, 
        estExpense = (float)a.estexpense, 
        estIncome = (float)a.estincome, 
        expense = (float)a.expense, 
        income = (float) a.income 
       }).Where(t => t.id == id).FirstOrDefault(); 
      return View(); 
     } 
    }else 
    { 
     TempData["notice"] = "No form with ID: " + id + " was found."; 
     return View(); 
    } 
} 

還有更簡單的方法來匹配一個sql類到viewmodels類嗎?

+0

先構建一個最小查詢:var form = db.form_preevent.FirstOrDefault(x => x.id == 100);看看是否有效。至於你的第二個問題,使用[AutoMapper](http://docs.automapper.org/en/stable/Queryable-Extensions.html)複製所有這些字段。 –

+0

請細化您的問題或標記以下答案之一爲已接受。 –

沙发
0
1

你太親近了。將View返回給客戶端時,必須返回Form變量。

public ActionResult reviewPreevent(int? id) 
{ 
    id = 100; 
    if (id.HasValue) 
    { 
     using(formEntities db = new formEntities()) { 
      var form = (from a in db.form_preevent 
       select new preeventForm 
       { 
        id = a.id, 
        meeting = a.meeting, 
        date = (DateTime)a.eventDate, 
        location = a.location, 
        p1Foyer = (bool)a.p1Foyer, 
        . 
        . 
        . 
        income = (float) a.income 
       }).Where(t => t.id == id).FirstOrDefault(); 
      return View(form); //THIS LINE MODIFIED 
     } 
    }else 
    { 
     TempData["notice"] = "No form with ID: " + id + " was found."; 
     return View(); 
    } 
} 
0
votes
answers
28 views
+10

使用c#和剃鬚刀設置html元素的ID

0

本質上,我爲每個循環的表格顯示新行。 一行中有一個名字,所以我想給td標籤一個「CatName」的ID +我在哪裏我是循環的迭代。例如,如果我們在循環的第二次迭代中,id將是「CatName2」。在下面貼的代碼,我已經嘗試使用@來調用C#代碼,但它僅與一個編譯錯誤返回:使用c#和剃鬚刀設置html元素的ID

Only assignment, call, increment, decrement, and new object expressions can be used as a statement

@{ 
    int i = 0; 
} 
@foreach (CategoryVM category in Model.CategoryList) 
{ 
    <tr> 
     <td id="@{"CatName" + i.ToString()}"></td> 
    </tr> 
    i++; 
} 
+0

請注意,模型 - 視圖 - 控制器標籤是關於模式的問題。 ASP.NET-MVC實現有一個特定的標籤。而不要在你的問題 –

沙发
0
3

使用括號(),而不是花括號來評估一個C#表達。

所以改變

<td id="@{"CatName" + i.ToString()}"></td> 

<td id="@("CatName" + i.ToString())"></td> 

該錯誤確認內@{ }內容應該是一個完整的陳述,而不是表達式。

+0

謝謝你的答案!這工作完美! –

0
votes
answers
19 views
+10

MVC局部視圖返回整個頁面,而不僅僅是部分

0

我有以下的局部視圖名爲「_transactions」:MVC局部視圖返回整個頁面,而不僅僅是部分

<div id="section-transactions" class="documentsanchor"> 
</div> 
<div> 
    <div class="row"> 
     <div class="col-lg-12"> 
      <div> 
       <h4 class="company-headings">@ViewBag.SecSymbol Transactions</h4> 
      </div> 
     <div> 
    </div> 
</div> 

我把它用

@{Html.RenderAction("Transactions", "Company");} 

數據,這是從交易方法本公司控制人:

public async Task<PartialViewResult> Transactions() 
    { 
     ViewBag.SecSymbol = "test"; 

     return PartialView("_transactions"); 
    } 

它在與其他部分視圖的頁面上。

這工作正常。但是,我在頁面上有一個按鈕,應該得到一個新的局部視圖並替換當前的視圖。它使一個Ajax調用如下

$("#btn_transactions").click(function (e) {   
     var url = "Company/Transactions"; 
     $.ajax({ 
      url: url, 
      success: function (result) { 
       alert(result); 
       $('#transTarget').html(result); 
      }, 
      error: function() { 
       alert("Error occured"); 
      } 
     }); 
    }) 

的問題是,整個頁面中的「結果」返回,也就是說,所有的諧音以及佈局,當所有我想要的是交易部分。我究竟做錯了什麼?

+0

相反Html.RenderAction的,使用Url.Action – Sparrow

+0

如果我這樣做,沒有得到呈現。 – Scott

+0

@Scott你是否將_transactions視圖的Layout屬性設置爲null? –

沙发
0
1

添加該代碼在局部視圖

@{ 
Layout=null; 
} 
0
votes
answers
17 views
+10

我的css文件中的跨度字段錯誤

0

我在嘗試在我的ASP.Net MVC項目中更改所需的字段驗證器顏色。我的css文件中的跨度字段錯誤

在我的形式,我有一個必填字段驗證這樣的:

<span class="field-validation-error" data-valmsg-for="Date" data-valmsg-replace="true"><span for="Date" class="">The Date field is required.</span> 

日期字段是必需的。

在我的CSS文件,我已經加入,

span.field-validation-error { 
    color: #b94a48; 
    font-weight: bold; 
} 

但驗證錯誤,顏色不是在瀏覽器中反映。 當我嘗試在Inspect元素中更改這樣的代碼時,一切正常。

沙发
0
0

試試這個:

span.field-validation-error > span { 
    color: #b94a48; 
    font-weight: bold; 
} 
5
votes
answers
14 views
+10

AppFabric Cache connection type and protocol

Does the AppFabric cache API (local, not Azure) use WCF as its communications mechanism? We are integrated AppFabric into a very high volume web application and seeing a ton of bottlenecks in some WCF calls. The profiler makes it seem like these are coming from our cache library, but they are all very low level system calls, so we are curious..

is appfabric cache accessed via a set of straight up set of TCP sockets connections? or are they some higher level protocols/designs that are layered on top of it? Appfabric has a lot of benefits beyond other providers (like memcached), but if there protocol overhead is so much on a high-volume system, we are worried it may cause problems.

thanks!

沙发
+30

是的,它使用了WCF。更具體地說,它使用tcp傳輸上的二進制消息編碼全部使用自定義配置的設置,我確信這是由AppFabric緩存團隊在大量負載測試場景之後選擇的。它還默認啟用安全性(傳輸和消息簽名/加密),肯定會增加一些CPU開銷。如果您確定網絡設計是安全的,可以禁用它們。

安全性往往會增加很多開銷,如果您為緩存集群/客戶端應用程序提供了安全的環境,則應該嘗試取消它。有關如何配置客戶端的更多詳細信息,請查看此MSDN頁面上標題為“安全設置”的部分另請參閱此MSDN頁面上標題為“群集配置存儲位置設置”的部分,以獲取有關如何在主機上配置安全性的詳細信息(注意:您可以使用Set-CacheClusterSecurityPowerShell命令輕鬆設置這些設置)。

板凳
+20

AppFabric的分佈式緩存和本地緩存方面使用WCF,是的。你在使用perfmon嗎?WCF和AppFabric Cache都提供了perfmon計數器,可以讓你精確地固定它。如果您使用本地緩存,是否使用通知?那當然會增加騷擾。

訪問緩存時,你是否正在進行大量鎖定?根據我的經驗,這似乎大大降低了AppFabric Cache的性能。

此外,Windows安全性和Sign或EncryptAndSign保護也會受到相當大的懲罰。

地板
0

完全贊同德魯所說的話。

我想通信部分已經針對性能進行了優化,不應該成為瓶頸。

您可能還想看看這個關於Windows Server AppFabric緩存性能的案例研究http://www.griddynamics.com/images/files/af_cache_benchmarking_1.4.pdf

對,我們會想到同樣的事情。但是,在我們可能正在查看錯誤的測試中,我們發現Appfabric將對象序列化為XML需要花費很長時間。Drew說不,它使用二進制序列化,但我找不到任何支持它的文檔。關閉安全性肯定會有所幫助,謝謝! - 傑森2011年5月24日18:34

這不是一個真正的答案,而是一個評論。 - Samuel Neff 2011年5月31日凌晨2點02分

321
votes
answers
17 views
+10

How do you bind an Enum to a DropDownList control in ASP.NET?

Let's say I have the following simple enum:

enum Response
{
    Yes = 1,
    No = 2,
    Maybe = 3
}

How can I bind this enum to a DropDownList control so that the descriptions are displayed in the list as well as retrieve the associated numeric value (1,2,3) once an option has been selected?

up vote 106 down vote accepted favorite
沙发
+1060
+50

我可能不會綁定數據,因為它是枚舉,並且在編譯之後它不會改變(除非我有一個 stoopid 時刻)。

最好只是遍歷枚舉:

  Dim itemValues As Array = System.Enum.GetValues(GetType(Response))Dim itemNames As Array = System.Enum。 GetNames(GetType(Response))For i As Integer = 0 To itemNames.Length  -  1 Dim item As New ListItem(itemNames(i),itemValues(i))dropdownlist.Items.Add(item)Next   

或者在C#中相同

 數組itemValues = System.Enum.GetValues(typeof(Response)); 數組itemNames = System.Enum.GetNames(typeof(Response)); for(int i = 0; i&lt; = itemNames.Length  -  1; i ++){ListItem item = new ListItem(itemNames [i],itemValues [i]); dropdownlist.Items.Add(項目); }  
     
			
        
+690

使用以下實用程序類 Enumeration Enumeration 獲取 IDictionary&lt; int,string&gt; (枚舉值和名稱對) ; 然後將 IDictionary 綁定到可綁定的Control。

  public static class Enumeration {public static IDictionary&lt; int,string&gt; GetAll&lt; TEnum&gt;()其中TEnum:struct {var enumerationType = typeof(TEnum); if(!enumerationType.IsEnum)拋出新的ArgumentException(“期望枚舉類型。”); var dictionary = new Dictionary&lt; int,string&gt;(); foreach(Enum.GetValues(enumerationType)中的int值){var name = Enum。GetName(enumerationType,value); dictionary.Add(value,name); } return dictionary; }   

示例:使用實用程序類將枚舉數據綁定到控件

  ddlResponse.DataSource = Enumeration.GetAll&lt ;響應&GT;(); ddlResponse.DataTextField =“Value”; ddlResponse.DataValueField =“Key”; ddlResponse.DataBind();   DataTextField =“Value”; ddlResponse.DataValueField =“Key”; ddlResponse.DataBind();   DataTextField =“Value”; ddlResponse.DataValueField =“Key”; ddlResponse.DataBind();  
     
			
        
+400

我將它用於 ASP.NET MVC

  Html.DropDownListFor(o =&gt; o.EnumProperty,Enum.GetValues(typeof(enumtype)) .Cast&lt; enumtype&gt;()。選擇(x =&gt; new SelectListItem {Text = x.ToString(),Value =((int)x).ToString()})) 
     
			
        
+350

我的版本只是以上的壓縮形式:

  foreach(Enum.GetValues中的響應r(typeof(Response))){ListItem item = new ListItem(Enum.GetName( typeof(Response),r),r.ToString()); DropDownList1.Items.Add(項目); }  
     
			
        
+220
  public enum Color {RED,GREEN,BLUE}   

每個Enum類型都派生自System.Enum。有兩種靜態方法可以幫助將數據綁定到下拉列表控件(並檢索值)。這些是Enum.GetNames和Enum.Parse。使用GetNames,您可以按如下方式綁定到下拉列表控件:

  protected System.Web.UI.WebControls.DropDownList ddColor; private void Page_Load(object sender,System.EventArgs e){if(!IsPostBack){ddColor.DataSource = Enum.GetNames(typeof(Color)); ddColor.DataBind();   

現在,如果你想讓Enum值返回選擇....

  private void ddColor_SelectedIndexChanged(object sender,System。
     
			
        
+110

閱讀完所有帖子後,我想出了一個全面的解決方案,支持在下拉列表中顯示枚舉說明,並在編輯模式下顯示時從下拉列表中選擇適當的值:

枚舉:

 使用System.ComponentModel; public enum CompanyType {[Description(“”)] Null = 1,[Description(“Supplier”)] Supplier = 2,[Description(“Customer”)] Customer = 3}   

枚舉擴展類:

  using System.Collections.Generic; 使用System.ComponentModel; 使用System.Linq; 使用System.Web.Mvc; public static class EnumExtension {public static string ToDescription(this System.Enum value){var attributes =(DescriptionAttribute [])value。GetType()。GetField(value.ToString())。GetCustomAttributes(typeof(DescriptionAttribute),false); return attributes.Length&gt; 0?attributes [0] .Description:value.ToString(); public static IEnumerable&lt; SelectListItem&gt; ToSelectList&lt; T&gt;(此System.Enum enumValue){return System.Enum.GetValues(enumValue.GetType())。Cast&lt; T&gt;().Select(x =&gt; new SelectListItem {Text =((System.Enum) (object)x)。ToDescription(),Value = x.ToString(),Selected =(enumValue.Equals(x))}); }   

模型類:

  公共類公司{public string CompanyName {get; 組; public ListType Type {get; 組;   

和視圖:

  @ Html.DropDownListFor(m =&gt; m.Type,@ Model.Type.ToSelectList&lt; CompanyType&gt;() )  

如果您使用該下拉列表而不綁定到Model,則可以使用此代碼:

  @ Html.DropDownList(“type”,Enum .GetValues(typeof(CompanyType))。Cast&lt; CompanyType&gt;().Select(x =&gt; new SelectListItem {Text = x.ToDescription(),Value = x.ToString()}))  

通過這樣做,您可以預期您的下拉列表顯示Description而不是枚舉值。此外,當談到編輯,

+80

正如其他人已經說過的那樣 - 不要將數據綁定到枚舉,除非您需要根據情況綁定到不同的枚舉。有幾種方法可以做到這一點,下面是幾個例子。

ObjectDataSource

使用ObjectDataSource進行聲明的方法。首先,創建一個BusinessObject類,它將返回List以將DropDownList綁定到:

  public class DropDownData {enum Responses {Yes = 1,No = 2,Maybe = 3} public String Text {得到; 組; } public int Value {get; 組; } public List&lt; DropDownData&gt; GetList(){var items = new List&lt; DropDownData&gt;(); foreach(Enum.GetValues中的int值(typeof(Responses))){items。添加(new DropDownData {Text = Enum.GetName(typeof(Responses),value),Value = value}); } 退換貨品; 然後將一些HTML標記添加到ASPX頁面以指向此BO類: 
 &lt; asp:DropDownList ID =“DropDownList1”runat}}   

=“server”DataSourceID =“ObjectDataSource1”DataTextField =“Text”DataValueField =“Value”&gt; &LT; / ASP:DropDownList的&GT; &lt; asp:ObjectDataSource ID =“ObjectDataSource1”runat =“server”SelectMethod =“GetList”TypeName =“DropDownData”&gt;&lt; / asp:ObjectDataSource&gt;

此選項不需要代碼。

DataBind背後的代碼

要最小化ASPX頁面中的HTML並在代碼隱藏中進行綁定:

  enum響應{Yes = 1,No = 2,Maybe = 3} protected void Page_Load(object sender,EventArgs e){if(!IsPostBack){foreach(Enum.GetValues中的int值(typeof) ))){DropDownList1.Items.Add(new ListItem(Enum.GetName(typeof(Responses),value),value.ToString()));   

無論如何,訣竅是讓GetValues,GetNames等的Enum類型方法為你工作。 要最小化ASPX頁面中的HTML並在代碼隱藏中進行綁定:

 枚舉響應{Yes = 1,No = 2,Maybe = 3} protected void Page_Load(object sender,EventArgs e) {if(!IsPostBack){foreach(Enum.GetValues中的int值(typeof(響應))){DropDownList1.Items.Add(new ListItem(Enum.GetName(typeof(Responses),value),value.ToString()) );   

無論如何,訣竅是讓GetValues,GetNames等的Enum類型方法為你工作。 要最小化ASPX頁面中的HTML並在代碼隱藏中進行綁定:

 枚舉響應{Yes = 1,No = 2,Maybe = 3} protected void Page_Load(object sender,EventArgs e) {if(!IsPostBack){foreach(Enum.GetValues中的int值(typeof(響應))){DropDownList1.Items.Add(new ListItem(Enum.GetName(typeof(Responses),value),value.ToString()) );   

無論如何,訣竅是讓GetValues,GetNames等的Enum類型方法為你工作。 GetValues(typeof(Responses))){DropDownList1.Items.Add(new ListItem(Enum.GetName(typeof(Responses),value),value.ToString()));

無論如何,訣竅是讓GetValues,GetNames等的Enum類型方法為你工作。 GetValues(typeof(Responses))){DropDownList1.Items.Add(new ListItem(Enum.GetName(typeof(Responses),value),value.ToString()));

無論如何,訣竅是讓GetValues,GetNames等的Enum類型方法為你工作。

+60

我不知道如何在ASP.NET中執行此操作但請查看這個帖子......它可能有幫助嗎?

  Enum.GetValues(typeof(Response));  
     
			
        
+50
  Array itemValues = Enum.GetValues(typeof(TaskStatus)); 數組itemNames = Enum.GetNames(typeof(TaskStatus)); for(int i = 0; i&lt; = itemNames.Length; i ++){ListItem item = new ListItem(itemNames.GetValue(i).ToString(),itemValues.GetValue(i).ToString()); ddlStatus.Items.Add(項目); }  
     
			
        

@Sarawut Positwinyu - 但你想要什麼寬高比? - Bibhu Jun 2011年5月28日5:26

如果無法將圖像調整為高度和寬度的最大值和最小值並保持縱橫比,您希望發生什麼? - Conrad Frix 2011年6月28日5:29

@Bibhu有多種類型的寬高比?我不知道。我只想讓圖像比率與原始圖像比率相似。 - Sarawut Positwinyu 2011年6月28日5:33

@Sarawut Positwinyu - 有關縱橫比的更多信息,請查看此Wiki鏈接。en.wikipedia.org/wiki/Aspect_ratio_%28image%29 - Bibhu Jun 28 '11 at 5:35

@Sarawut Positwinyu您沒有濫用術語縱橫比。或者如果你做得很好 - 康萊德Frix 2011年6月28日5:50

+50

你可以使用linq:

  var responseTypes = Enum.GetNames(typeof(Response))。選擇(x =&gt; new {text = x,value =(int)Enum。解析(typeof(Response),x)}); DropDownList.DataSource = responseTypes; DropDownList.DataTextField =“text”; DropDownList.DataValueField =“value”; DropDownList.DataBind();  
     
			
        
+40
  public enum Color {RED,GREEN,BLUE} ddColor.DataSource = Enum.GetNames(typeof(Color)); ddColor.DataBind();  
     
			
        
+30

使用Answer 6的通用代碼。

  public static void BindControlToEnum(Da??taBoundControl ControlToBind,Type type){// ListControl if(type == null)throw new ArgumentNullException(“type”); else if(ControlToBind == null)拋出新的ArgumentNullException(“ControlToBind”); if(!type.IsEnum)拋出新的ArgumentException(“只需要枚舉類型。”); 字典&lt; int,string&gt; pairs = new Dictionary&lt; int,string&gt;(); foreach(enum.GetValues(type)中的int i){pairs.Add(i,Enum.GetName(type,i)); } ControlToBind.DataSource = pairs; ListControl lstControl = ControlToBind作為ListControl; if(lstControl!= null){lstControl.DataTextField =“Value”; lstControl.DataValueField =“Key”; ControlToBind.DataBind(); }  
     
			
        
+30

找到這個答案後,我想出了一個更好(至少更優雅)的方式,我想回來分享一下。

Page_Load:

  DropDownList1.DataSource = Enum.GetValues(typeof(Response)); DropDownList1.DataBind();   

LoadValues:

 響應rIn = Response.Maybe; DropDownList1.Text = rIn.ToString();   

SaveValues:

 響應rOut =(響應)Enum.Parse(typeof(Response),DropDownList1.Text);  
     
			
        
+10
+10

為什麼不使用這樣才能傳遞每個listControle:

  public static void BindToEnum(Type enumType,ListControl lc){//從枚舉字符串中獲取名稱[] names = Enum.GetNames(enumType); //從枚舉數組中獲取值= Enum.GetValues(enumType); //將其轉換為哈希表Hashtable ht = new Hashtable(); for(int i = 0; i&lt; names.Length; i ++)//注意這裡的強制轉換是重要的//否則我們只需要再次獲取枚舉字符串ht.Add(names [i],(int) )values.GetValue(I)); //返回要綁定到lc.DataSource = ht的字典; lc.DataTextField =“Key”; lc.DataValueField =“Value”; lc.DataBind(); }  使用就像下面這樣簡單:
  BindToEnum(typeof(NewsType),DropDownList1); BindToEnum(typeof(NewsType),CheckBoxList1); BindToEnum(typeof(NewsType),RadoBuuttonList1);  
     
			
        
+10

ASP.NET已經更新了一些更多的功能,你現在可以使用內置的枚舉來下拉。

如果你想綁定Enum本身,請使用:

  @ Html.DropDownList(“response”,EnumHelper.GetSelectList(typeof(Response)))  

如果你綁定了一個Response實例,請使用這個:

  //假設Model.Response是Response @ Html.EnumDropDownListFor(m =&gt; m.Response)的實例 
     
			
        
+10

這可能是一個老問題..但這就是我的做法。

模型:

 公共類YourEntity {public int ID {get; 組; public string Name {get; 組; } public string描述{get; 組; 公共OptionType類型{get; 組; 公共枚舉OptionType {Unknown,Option1,Option2,Option3}   

然後在視圖中:這裡是如何使用填充下拉列表。

  @Html .EnumDropDownListFor(model =&gt; model.Types,htmlAttributes:new {@class =“form-control”})  

這應填充枚舉列表中的所有內容。希望這會有所幫助..

0

這是我使用LINQ

  var mylist = Enum.GetValues(typeof(MyEnum))訂購枚舉和數據綁定(文本和值)的解決方案.Cast&lt; MyEnum&gt;( ).ToList&lt; MyEnum&gt;()。OrderBy(l =&gt; l.ToString()); foreach(mylist中的MyEnum項)ddlDivisao.Items.Add(new ListItem(item.ToString(),((int)item).ToString()));  
     
			
        
0

查看我關於創建自定義幫助程序的帖子“ASP.NET MVC - 為枚舉創建DropDownList幫助程序”: http://blogs.msdn.com/b/stuartleeks/archive/2010/05/21 /asp-net-mvc-creating-a-dropdownlist-helper-for-enums.aspx

0

如果您希望在組合框(或其他控件)中具有更友好的用戶描述,可以使用帶有以下函數的Description屬性:

  public static object GetEnumDescriptions(Type enumType){var list = new List&lt; KeyValuePair&lt; Enum,string&gt;&gt;(); foreach(Enum.GetValues(enumType)中的枚舉值){string description = value.ToString(); FieldInfo fieldInfo = value.GetType()。GetField(description); var attribute = fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute),false).First(); if(attribute!= null){description =(attribute as DescriptionAttribute).Description; } list.Add(new KeyValuePair&lt; Enum,string&gt;(值,描述)); } return list; }   

以下是應用了描述屬性的枚舉示例:

 枚舉SampleEnum {NormalNoSpaces,[描述(“帶空格的描述”)] DescriptionWithSpaces ,[描述(“50%”)] Percent_50,}   

然後綁定到控件如此......

  m_Combo_Sample.DataSource = GetEnumDescriptions(typeof (SampleEnum)); m_Combo_Sample.DisplayMember =“Value”; m_Combo_Sample.ValueMember =“Key”;   

通過這種方式,您可以在下拉列表中放置所需的任何文本,而不必看起來像變量名稱 (價值,描述)); } return list; }

以下是應用了描述屬性的枚舉示例:

 枚舉SampleEnum {NormalNoSpaces,[描述(“帶空格的描述”)] DescriptionWithSpaces ,[描述(“50%”)] Percent_50,}   

然後綁定到控件如此......

  m_Combo_Sample.DataSource = GetEnumDescriptions(typeof (SampleEnum)); m_Combo_Sample.DisplayMember =“Value”; m_Combo_Sample.ValueMember =“Key”;   

通過這種方式,您可以在下拉列表中放置所需的任何文本,而不必看起來像變量名稱 (價值,描述)); } return list; }

以下是應用了描述屬性的枚舉示例:

 枚舉SampleEnum {NormalNoSpaces,[描述(“帶空格的描述”)] DescriptionWithSpaces ,[描述(“50%”)] Percent_50,}   

然後綁定到控件如此......

  m_Combo_Sample.DataSource = GetEnumDescriptions(typeof (SampleEnum)); m_Combo_Sample.DisplayMember =“Value”; m_Combo_Sample.ValueMember =“Key”;   

通過這種方式,您可以在下拉列表中放置所需的任何文本,而不必看起來像變量名稱 描述)); } return list; }

以下是應用了描述屬性的枚舉示例:

 枚舉SampleEnum {NormalNoSpaces,[描述(“帶空格的描述”)] DescriptionWithSpaces ,[描述(“50%”)] Percent_50,}   

然後綁定到控件如此......

  m_Combo_Sample.DataSource = GetEnumDescriptions(typeof (SampleEnum)); m_Combo_Sample.DisplayMember =“Value”; m_Combo_Sample.ValueMember =“Key”;   

通過這種方式,您可以在下拉列表中放置所需的任何文本,而不必看起來像變量名稱 描述)); } return list; }

以下是應用了描述屬性的枚舉示例:

 枚舉SampleEnum {NormalNoSpaces,[描述(“帶空格的描述”)] DescriptionWithSpaces ,[描述(“50%”)] Percent_50,}   

然後綁定到控件如此......

  m_Combo_Sample.DataSource = GetEnumDescriptions(typeof (SampleEnum)); m_Combo_Sample.DisplayMember =“Value”; m_Combo_Sample.ValueMember =“Key”;   

通過這種方式,您可以在下拉列表中放置所需的任何文本,而不必看起來像變量名稱 } return list; }

以下是應用了描述屬性的枚舉示例:

 枚舉SampleEnum {NormalNoSpaces,[描述(“帶空格的描述”)] DescriptionWithSpaces ,[描述(“50%”)] Percent_50,}   

然後綁定到控件如此......

  m_Combo_Sample.DataSource = GetEnumDescriptions(typeof (SampleEnum)); m_Combo_Sample.DisplayMember =“Value”; m_Combo_Sample.ValueMember =“Key”;   

通過這種方式,您可以在下拉列表中放置所需的任何文本,而不必看起來像變量名稱 } return list; }

以下是應用了描述屬性的枚舉示例:

 枚舉SampleEnum {NormalNoSpaces,[描述(“帶空格的描述”)] DescriptionWithSpaces ,[描述(“50%”)] Percent_50,}   

然後綁定到控件如此......

  m_Combo_Sample.DataSource = GetEnumDescriptions(typeof (SampleEnum)); m_Combo_Sample.DisplayMember =“Value”; m_Combo_Sample.ValueMember =“Key”;   

通過這種方式,您可以在下拉列表中放置所需的任何文本,而不必看起來像變量名稱 }

以下是應用了描述屬性的枚舉示例:

 枚舉SampleEnum {NormalNoSpaces,[描述(“帶空格的描述”)] DescriptionWithSpaces ,[描述(“50%”)] Percent_50,}   

然後綁定到控件如此......

  m_Combo_Sample.DataSource = GetEnumDescriptions(typeof (SampleEnum)); m_Combo_Sample.DisplayMember =“Value”; m_Combo_Sample.ValueMember =“Key”;   

通過這種方式,您可以在下拉列表中放置所需的任何文本,而不必看起來像變量名稱 }

以下是應用了描述屬性的枚舉示例:

 枚舉SampleEnum {NormalNoSpaces,[描述(“帶空格的描述”)] DescriptionWithSpaces ,[描述(“50%”)] Percent_50,}   

然後綁定到控件如此......

  m_Combo_Sample.DataSource = GetEnumDescriptions(typeof (SampleEnum)); m_Combo_Sample.DisplayMember =“Value”; m_Combo_Sample.ValueMember =“Key”;   

通過這種方式,您可以在下拉列表中放置所需的任何文本,而不必看起來像變量名稱 以下是應用了描述屬性的枚舉示例:

 枚舉SampleEnum {NormalNoSpaces,[描述(“帶空格的描述”)] DescriptionWithSpaces,[Description(“50%”)] Percent_50, }   

然後綁定到這樣控制......

  m_Combo_Sample.DataSource = GetEnumDescriptions(typeof(SampleEnum)); m_Combo_Sample.DisplayMember =“Value”; m_Combo_Sample.ValueMember =“Key”;   

通過這種方式,您可以在下拉列表中放置所需的任何文本,而不必看起來像變量名稱 以下是應用了描述屬性的枚舉示例:

 枚舉SampleEnum {NormalNoSpaces,[描述(“帶空格的描述”)] DescriptionWithSpaces,[Description(“50%”)] Percent_50, }   

然後綁定到這樣控制......

  m_Combo_Sample.DataSource = GetEnumDescriptions(typeof(SampleEnum)); m_Combo_Sample.DisplayMember =“Value”; m_Combo_Sample.ValueMember =“Key”;   

通過這種方式,您可以在下拉列表中放置所需的任何文本,而不必看起來像變量名稱 枚舉SampleEnum {NormalNoSpaces,[Description(“Space With Spaces”)] DescriptionWithSpaces,[Description(“50%”)] Percent_50,}

然後Bind to control如此... < / p>

  m_Combo_Sample.DataSource = GetEnumDescriptions(typeof(SampleEnum)); m_Combo_Sample.DisplayMember =“Value”; m_Combo_Sample.ValueMember =“Key”;   

通過這種方式,您可以在下拉列表中放置所需的任何文本,而不必看起來像變量名稱 枚舉SampleEnum {NormalNoSpaces,[Description(“Space With Spaces”)] DescriptionWithSpaces,[Description(“50%”)] Percent_50,}

然後Bind to control如此... < / p>

  m_Combo_Sample.DataSource = GetEnumDescriptions(typeof(SampleEnum)); m_Combo_Sample.DisplayMember =“Value”; m_Combo_Sample.ValueMember =“Key”;   

通過這種方式,您可以在下拉列表中放置所需的任何文本,而不必看起來像變量名稱 p>然後綁定到這樣控制......

  m_Combo_Sample.DataSource = GetEnumDescriptions(typeof(SampleEnum)); m_Combo_Sample.DisplayMember =“Value”; m_Combo_Sample.ValueMember =“Key”;   

通過這種方式,您可以在下拉列表中放置所需的任何文本,而不必看起來像變量名稱 p>然後綁定到這樣控制......

  m_Combo_Sample.DataSource = GetEnumDescriptions(typeof(SampleEnum)); m_Combo_Sample.DisplayMember =“Value”; m_Combo_Sample.ValueMember =“Key”;   

通過這種方式,您可以在下拉列表中放置所需的任何文本,而不必看起來像變量名稱

0

您也可以使用擴展方法。對於那些不熟悉擴展名的人,我建議您查看 VB C#文檔。


VB擴展:

 命名空間CustomExtensions公共模塊ListItemCollectionExtension&lt; Runtime.CompilerServices.Extension()&gt; _ Public Sub AddEnum(TEnum As Structure)(項目為System.Web.UI.WebControls.ListItemCollection)Dim enumerationType As System.Type = GetType(TEnum)Dim enumUnderType As System.Type = System.Enum。C#擴展: 
 命名空間CustomExtensions {public static class ListItemCollectionExtension {public static void AddEnum&lt; TEnum&gt;(此System.Web.UI.WebControls.ListItemCollection項)其中TEnum:struct {System.Type enumType = typeof(TEnum); System.Type enumUnderType = System.Enum.GetUnderlyingType(enumType); if(!enumType.IsEnum)拋出新的異常(“預期枚舉類型。”); string [] enumTypeNames = System.Enum.GetNames(enumType); TEnum [] enumTypeValues =(TEnum [])System.Enum.GetValues(enumType); for(int i = 0; i&lt; enumTypeValues.Length; i ++){items.add(new System.Web.UI.WebControls.ListItem(enumTypeNames [i],(enumTypeValues [i] as System.Enum))。的ToString(“d”))); } <}   

使用擴展名:

 使用CustomExtensions.ListItemCollectionExtension; ... yourDropDownList.Items.AddEnum&lt; EnumType&gt;()  

如果要同時設置所選項目,請替換

  items.Add(New System.Web.UI.WebControls.ListItem(saveResponseTypeNames(i),saveResponseTypeValues(i).ToString(“d”)))  

with < pre> Dim newListItem As System.Web.UI.WebControls.ListItem newListItem = New System.Web.UI.WebControls.ListItem(enumTypeNames(i),Convert.ChangeType(enumTypeValues(i),enumUnderType).ToString() )newListItem.Selected = If(EqualityComparer(Of TEnum)。Default.Equals(selected,saveResponseTypeValues(i)),True,False)items.Add(newListItem)

通過轉換為System.Enum而不是int size和輸出問題。例如,0xFFFF0000作為uint將是4294901760,但作為int將是-65536。

TryCast和System.Enum比Convert.ChangeType(enumTypeValues [i],enumUnderType)稍快.ToString() (在我的速度測試中12:13)。

0

使用combobox和dropdownlist的asp.net和winforms教程:如何在C#WinForms和Asp.Net中使用Enum和Combobox

希望幫助

0

接受的解決方案不起作用,但下面的代碼將幫助其他人尋找最短的解決方案。

  foreach(Enum.GetNames中的字符串值(typeof(響應)))ddlResponse .Items.Add(new ListItem(){Text = value,Value =((int)Enum.Parse(typeof(Response),value))。ToString()});