2010-10-05 12 views
10

SqlDataSource के लिए मैं आने वाले पैरामीटर के लिए बाहरी स्रोत को कॉन्फ़िगर कर सकता हूं। उदाहरण के लिए यह एक क्वेरीस्ट्रिंग, सत्र, प्रोफाइल और अन्य हो सकता है। हालांकि मेरे पास स्रोत के रूप में उपयोगकर्ता का उपयोग करने का विकल्प नहीं है।ASP.NET में SqlDataSource के पैरामीटर के रूप में User.Identity.Name का उपयोग कैसे करें?

मुझे पता है कि मैं घटनाओं को सम्मिलित करने, चयन करने, अद्यतन करने, हटाने में पैरामीटर के लिए मूल्य प्रदान कर सकता हूं। लेकिन मुझे नहीं लगता कि यह एक शानदार समाधान है क्योंकि मेरे पास एएसपीएक्स फ़ाइल में पहले से ही कुछ पैरामीटर्स हैं। मैं पैरामीटर को दो अलग-अलग स्थानों में परिभाषित नहीं करना चाहता हूं। यह गड़बड़ करता है।

तो क्या मैं किसी भी तरह से इस पैरामीटर को .aspx फ़ाइल में परिभाषित कर सकता हूं?

<SelectParameters> 
     <asp:QueryStringParameter DefaultValue="-1" Name="ID" 
      QueryStringField="ID" /> 
     //User.Identity.Name goes here as a value for another parameter 
    </SelectParameters> 

उत्तर

13

अपने .aspx में यह घोषित करने और अपने codebehind में भरने: में एएसपी पेज पुट

aspx

<asp:Parameter Name="username" Type="String" DefaultValue="Anonymous" /> 

codebehind

protected void Page_Init(object sender, EventArgs e) { 
    DataSource.SelectParameters["username"].DefaultValue = User.Identity.Name; 
} 
+1

सी # कोड – lincolnk

+0

में 'वैल्यू' के बजाय' डीफॉल्ट वैल्यू 'होना चाहिए धन्यवाद जनवरी, लेकिन यही वह है जिसे मैं टालना चाहता हूं। आपके उदाहरण में मुझे कोडबेंड में पैरामीटर के मान को भरने की आवश्यकता है। तो मुझे दो अलग-अलग स्थानों में पैरामीटर को संभालना होगा: एएसपीएक्स फ़ाइल में और सीएस फ़ाइल में। क्या मैं एएसपीएक्स में पैरामीटर को एएसपीएक्स और बाइंड वैल्यू में भी घोषित नहीं कर सकता? – Wodzu

+0

आप इसे ' ' –

1

एक कनेक्शनस्ट्रिंग

उदा।

<asp:SqlDataSource ID="SqlDataSourceDeviceID" runat="server" ConnectionString="<%$ ConnectionStrings:myConnectionString %>"> 
<asp:DropDownList ID="DropDownListDeviceID" runat="server" DataSourceID="SqlDataSourceDeviceID" DataTextField="DevLoc" DataValueField="DeviceId"></asp:DropDownList> 
कोड में पीछे pageload पर

protected void Page_Load(object sender, EventArgs e) 
    { 
if (!IsPostBack) { 
    String myQuery =String.Format("SELECT DeviceID,DevLoc FROM ... where UserName='{0}')",User.Identity.Name); 
    SqlDataSourceDeviceID.SelectCommand = myQuery; 
    SqlDataSourceDeviceID.DataBind(); 
    DropDownListDeviceID.DataBind(); 
} 
1

आप पृष्ठ पर एक छुपा पाठ बॉक्स बनाकर ऐसा कर सकते हैं, मूल्य के लिए User.Identity.Name लागू करते हैं और उसके बाद में formcontrol पैरामीटर का उपयोग एसक्यूएल डेटा स्रोत। यहां का लाभ यह है कि आप अतिरिक्त कोड के बिना पैरामीटर को चुनने, डालने, हटाने और अपडेट करने के लिए कोड का पुन: उपयोग कर सकते हैं।

तो aspx में हम है (noneDisplay इसे छिपाने के लिए एक सीएसएस वर्ग है):

<asp:TextBox runat="server" ID="txtWebAuthUser" CssClass="noneDisplay"></asp:TextBox> 

और एसक्यूएल डेटा स्रोत अद्यतन अनुभाग के अपडेट पैरामीटर में:

<asp:ControlParameter Name="CUrrentUser" ControlID="txtWebAuthUser" Type="String" PropertyName="Text" /> 

जिसमें व्याख्या हो जाता है इस तरह कुछ अपडेट करें:

UpdateCommand="UPDATE [Checks] SET [ScholarshipName] = @ScholarshipName, [Amount] = @Amount,[email protected], 
     [LastModified] = getdate() WHERE [CheckId] = @CheckId" 

और फिर .cs फ़ाइल फॉर्म लोड में हमारे पास है:

this.txtWebAuthUser.Text = User.Identity.Name; 

इस तकनीक ने हमारे सभी अनुप्रयोगों में कई स्थानों पर अच्छी तरह से काम किया है।

+0

क्या यह एक अंतरंग सुरक्षा छेद नहीं छोड़ता है, जहां आप छिपे हुए टेक्स्ट बॉक्स में चर बदलकर अन्य उपयोगकर्ताओं का प्रतिरूपण कर सकते हैं? –

+0

इसे पेज लोड पर सेट करें, इसलिए उपयोगकर्ता द्वारा कोई भी परिवर्तन नहीं देखा जाएगा। –

संबंधित मुद्दे