প্রোফাইল মানগুলি কীভাবে অর্পণ করবেন?


110

আমি কী অনুপস্থিত তা আমি জানি না, তবে আমি ওয়েবকনফিগ ফাইলে প্রোফাইল বৈশিষ্ট্য যুক্ত করেছি তবে প্রোফাইল অ্যাক্সেস করতে পারছি না। কোড আইটেম বা একটি নতুন প্রোফাইল তৈরি করুন।

উত্তর:


179

আমি আজ একই সমস্যা ছিল, এবং অনেক শিখেছি।

ভিজ্যুয়াল স্টুডিওতে দুটি ধরণের প্রকল্প রয়েছে - "ওয়েব সাইট প্রকল্প" এবং "ওয়েব অ্যাপ্লিকেশন প্রকল্পগুলি"। যে কারণে আমার কাছে সম্পূর্ণ রহস্য, ওয়েব অ্যাপ্লিকেশন প্রকল্পগুলি প্রোফাইল ব্যবহার করতে পারে না সরাসরি ... জোরালোভাবে টাইপ করা শ্রেণিটি আপনার জন্য ওয়েবকনফিগ ফাইল থেকে জাদুকরীভাবে তৈরি হয় না, তাই আপনাকে নিজের রোল করতে হবে।

এমএসডিএন-এর নমুনা কোডটি ধরে নিয়েছে যে আপনি কোনও ওয়েব সাইট প্রকল্প ব্যবহার করছেন, এবং তারা আপনাকে সম্পত্তি সহ <profile>আপনার Web.configএবং পার্টিতে কোনও বিভাগ যুক্ত করতে বলে , তবে এটি ওয়েব অ্যাপ্লিকেশন প্রকল্পগুলিতে কাজ করে না।Profile.

আপনার নিজস্ব রোল করার জন্য আপনার দুটি পছন্দ আছে:

(1) ওয়েব প্রোফাইল বিল্ডার ব্যবহার করুন । এটি ভিজ্যুয়াল স্টুডিওতে আপনি যুক্ত একটি কাস্টম সরঞ্জাম যা ওয়েবকনফাইগের আপনার সংজ্ঞা থেকে আপনার প্রয়োজনীয় প্রোফাইল অবজেক্টটি স্বয়ংক্রিয়ভাবে উত্পন্ন করে।

আমি এটি না করা বেছে নিয়েছি, কারণ আমি চাইছি না যে আমার কোডটি এই অতিরিক্ত সরঞ্জামটি সংকলিত করার জন্য নির্ভর করবে, যা তারা এই সরঞ্জামটির প্রয়োজন অনুধাবন করেই আমার কোডটি তৈরি করার চেষ্টা করার সময় লাইনের নীচে অন্য কারও জন্য সমস্যা সৃষ্টি করতে পারে।

(২) আপনার নিজস্ব ProfileBaseকাস্টম প্রোফাইল উপস্থাপন থেকে প্রাপ্ত এমন একটি নিজস্ব শ্রেণি তৈরি করুন । এটি এটি মনে হয় চেয়ে সহজ। এখানে একটি খুব সাধারণ উদাহরণ যা একটি "সম্পূর্ণ নাম" স্ট্রিং প্রোফাইল ক্ষেত্র যুক্ত করে:

আপনার ওয়েব.কমফিগ:

<profile defaultProvider="SqlProvider" inherits="YourNamespace.AccountProfile">

<providers>
     <clear />
     <add name="SqlProvider"
          type="System.Web.Profile.SqlProfileProvider"
          connectionStringName="sqlServerMembership" />
</providers>

</profile>

অ্যাকাউন্টপ্রোফিল.সি.এস নামে একটি ফাইলে:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Profile;
using System.Web.Security;

namespace YourNamespace
{
    public class AccountProfile : ProfileBase
    {
        static public AccountProfile CurrentUser
        {
            get { return (AccountProfile)
                         (ProfileBase.Create(Membership.GetUser().UserName)); }
        }

        public string FullName
        {
            get { return ((string)(base["FullName"])); }
            set { base["FullName"] = value; Save(); }
        }

        // add additional properties here
    }
}

একটি প্রোফাইল মান সেট করতে:

AccountProfile.CurrentUser.FullName = "Snoopy";

একটি প্রোফাইল মান পেতে

string x = AccountProfile.CurrentUser.FullName;

10
স্ট্যাকওভারফ্লো নিজেই প্রোফাইল ব্যবহার করে না। এই কোডটি প্রতিদিন 10,000,000 পৃষ্ঠা দর্শন সহ কোনও সাইটের পক্ষে যথেষ্ট দ্রুত নয়। আমি যখন এটি লিখেছিলাম তখন আমি অন্য একটি প্রকল্পে কাজ করছিলাম।
জোয়েল স্পলস্কি

1
এটি আমার নিজের দোষ, তবে কারেন্ট ইউজারকে কল করার পরে সম্পত্তি সেট করার ক্ষেত্রে আমি বেশ কিছুক্ষণ সংগ্রাম করেছি। যেহেতু কারেন্টইউসার প্রতিটি বার ইনস্ট্যান্ট করে এবং একটি নতুন উদাহরণ ফেরত দেয়, আমি কি পরিবর্তে এটি একটি পদ্ধতি হিসাবে সংজ্ঞায়িত করার পরামর্শ দিতে পারি? চিন্তা না করেই আমি এটি লিখেছিলাম: অ্যাকাউন্টপ্রোফাই.কন্টেনারউজার.ফুলনাম = "স্নোপি"; অ্যাকাউন্টপ্রোফিল.কন্টেনউসর.অথারপ্রোপার্টি = "এবিসি"; AccountProfile.CurrentUser.Save (); যা কাজ করে না এটি হওয়া উচিত: অ্যাকাউন্টপ্রোফাইল কারেন্টপ্রোফাইল = অ্যাকাউন্টপ্রোফিল.কন্টেনর ব্যবহারকারী; কারেন্টপ্রোফিল.ফুলনাম = "স্নুপি"; কারেন্টপ্রোফাইল.অথারপ্রোপার্টি = "এবিসি"; currentProfile.Save ();
জেরেমি গ্রুইনওয়াল্ড

1
এই জাতীয় প্রোফাইলের পুরো উদ্দেশ্যকে পরাজিত করে না? আপনি "প্রোফাইল.মাইপ্রোপার্টি" ব্যবহার করতে পারবেন না, আপনাকে নিজের গৃহ-বর্ধিত শ্রেণি ব্যবহার করতে হবে, যা প্রতিটি পৃষ্ঠায় প্রোফাইল স্বয়ংক্রিয়ভাবে সেট আপ হয় না। এই সমস্ত কি আপনাকে কোড (কোড) না করে সেভ () বৈশিষ্ট্যটি ব্যবহার করতে দেয়।
মাইক কে

7
ওয়েব অ্যাপ্লিকেশন প্রকল্পগুলি প্রোফাইল ব্যবহার করতে পারে না।
জোয়েল স্পলস্কি

2
আপনি যদি ভুলভাবে ওয়েব <profile ..><properties><add name="..">কনফিগের পাশাপাশি সেইসাথে অ্যাকাউন্টপ্রোফাইল শ্রেণিতে প্রোফাইল বৈশিষ্ট্যগুলি সংজ্ঞায়িত করেন তবে আপনি ওয়েবকনফাইগের বৈশিষ্ট্যগুলি সরিয়ে সহজেই ঠিক করা "এই সম্পত্তিটি ইতিমধ্যে সংজ্ঞায়িত করা হয়েছে" পেয়ে যাবেন।
জাচারি স্কট

17

ওয়েব অ্যাপ্লিকেশন প্রকল্পগুলি তখনও প্রোফাইলকমন ​​অবজেক্টটি কেবলমাত্র রানটাইম ব্যবহার করতে পারে। এর কোডটি কেবলমাত্র প্রকল্পে তৈরি করা হয়নি তবে ক্লাসটি এএসপি.নেট তৈরি করেছে এবং রানটাইমটিতে উপস্থিত রয়েছে is

অবজেক্টে যাওয়ার সহজ উপায় হ'ল নীচে প্রদর্শিত হিসাবে ডায়নামিক টাইপ ব্যবহার করা।

Web.config ফাইলে প্রোফাইল বৈশিষ্ট্য ঘোষণা করুন:

<profile ...
 <properties>
   <add name="GivenName"/>
   <add name="Surname"/>
 </properties>

তারপরে বৈশিষ্ট্যগুলি অ্যাক্সেস করতে:

dynamic profile = ProfileBase.Create(Membership.GetUser().UserName);
string s = profile.GivenName;
profile.Surname = "Smith";

প্রোফাইল বৈশিষ্ট্যে পরিবর্তনগুলি সংরক্ষণ করতে:

profile.Save();

গতিশীল ধরণগুলি ব্যবহার করে আপনি স্বাচ্ছন্দ্য বোধ করেন এবং সংকলন-সময় চেকিং এবং ইন্টেলিসেন্সের অভাবকে ঘৃণা করেন না তবে উপরেরটি সূক্ষ্মভাবে কাজ করে।

আপনি যদি এএসপি. নেট নেট এমভিসির সাথে এটি ব্যবহার করেন তবে আপনাকে কিছু অতিরিক্ত কাজ করতে হবে যদি আপনি নিজের মতামতগুলিতে গতিশীল প্রোফাইল অবজেক্টটি পাস করেন যেহেতু এইচটিএমএল সহায়ক পদ্ধতিগুলি গতিশীল "মডেল" অবজেক্টগুলির সাথে ভাল খেলেন না। এইচটিএমএল সহায়ক সহায়ক পদ্ধতিতে প্রেরণের আগে আপনাকে প্রোফাইল বৈশিষ্ট্য স্থিতিযুক্ত টাইপযুক্ত ভেরিয়েবলগুলিতে নির্ধারণ করতে হবে।

// model is of type dynamic and was passed in from the controller
@Html.TextBox("Surname", model.Surname) <-- this breaks

@{ string sn = model.Surname; }
@Html.TextBox("Surname", sn); <-- will work

উপরে যদি বর্ণিত জোয়েল যেমন আপনি একটি কাস্টম প্রোফাইল শ্রেণি তৈরি করেন তবে এএসপি.নেট এখনও প্রোফাইলকমনের ক্লাস তৈরি করবে তবে এটি আপনার কাস্টম প্রোফাইল শ্রেণীর উত্তরাধিকার সূত্রে প্রাপ্ত হবে। যদি আপনি কোনও কাস্টম প্রোফাইল শ্রেণি নির্দিষ্ট না করেন তবে প্রোফাইলকমন ​​System.Web.Profile.ProfileBase থেকে উত্তরাধিকারী হবে।

আপনি যদি নিজের প্রোফাইল ক্লাস তৈরি করেন তবে নিশ্চিত হয়ে নিন যে আপনি ইতিমধ্যে নিজের কাস্টম প্রোফাইল শ্রেণিতে ঘোষণা করেছেন এমন ওয়েবকনফিগ ফাইলে প্রোফাইল বৈশিষ্ট্য নির্দিষ্ট করা হয়নি। আপনি যদি এএসপি করেন N নেট প্রোফাইল প্রোফাইল ক্লাস উত্পন্ন করার চেষ্টা করার সময় একটি সংকলক ত্রুটি দেয়।


আমি প্রোফাইল সংরক্ষণ করতে পারি না। ত্রুটিটি হ'ল: 'প্রোফাইলকমনে' 'সেভ' এর সংজ্ঞা নেই
জিমি

2
@ সালমান: প্রোফাইলকমনটি সিস্টেম.ওয়েব.প্রাইফাইল.প্রফিলবেস থেকে প্রাপ্ত যা একটি সংরক্ষণ পদ্ধতি () সংরক্ষণ করে। আপনার মূলধন সঠিক কিনা তা পরীক্ষা করুন। দেখুন: এমএসডিএন.মাইক্রোসফটকম
en

13

প্রোফাইল ওয়েব অ্যাপ্লিকেশন প্রকল্পগুলিতেও ব্যবহার করা যেতে পারে। বৈশিষ্ট্যগুলি ডিজাইন সময় বা প্রোগ্রামমেটিকভাবে ওয়েবকনফিগে সংজ্ঞায়িত করা যায়। ওয়েবকনফিগে:

<profile enabled="true" automaticSaveEnabled="true" defaultProvider="AspNetSqlProfileProvider">
      <providers>
        <clear/>
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="TestRolesNProfiles"/>
      </providers>
      <properties>
        <add name="FirstName"/>
        <add name="LastName"/>
        <add name ="Street"/>
        <add name="Address2"/>
        <add name="City"/>
        <add name="ZIP"/>
        <add name="HomePhone"/>
        <add name="MobilePhone"/>
        <add name="DOB"/>

      </properties>
    </profile>

বা প্রোগ্রামেটিক্যালি, একটি শুরু করতে গিয়ে দ্বারা প্রফাইল অধ্যায় তৈরি ProfileSection এবং ব্যবহার পৃথক বৈশিষ্ট্য তৈরি ProfilePropertySettings এবং ProfilePropertySettingsColletion , যার মধ্যে সব System.Web.Configuration নামস্থান রয়েছে। প্রোফাইলের সেই বৈশিষ্ট্যগুলি ব্যবহার করতে, System.Web.Profile.ProfileBase অবজেক্ট ব্যবহার করুন। প্রোফাইল বৈশিষ্ট্যগুলি প্রোফাইল দিয়ে অ্যাক্সেস করা যায় না সিনট্যাক্স উপরের হিসাবে উল্লেখ করা হয়েছে, কিন্তু সহজে একটি ProfileBase শুরু করতে গিয়ে এবং ব্যবহার করে কাজ করা যেতে পারে SetPropertyValue ( " PropertyName ") এবং GetPropertyValue { " PropertyName ") নিম্নরূপ:

ProfileBase curProfile = ProfileBase.Create("MyName");

বা বর্তমান ব্যবহারকারীর প্রোফাইল অ্যাক্সেস করতে:

ProfileBase curProfile = ProfileBase.Create(System.Web.Security.Membership.GetUser().UserName);



        curProfile.SetPropertyValue("FirstName", this.txtName.Text);
        curProfile.SetPropertyValue("LastName", this.txtLname.Text);
        curProfile.SetPropertyValue("Street", this.txtStreet.Text);
        curProfile.SetPropertyValue("Address2", this.txtAdd2.Text);
        curProfile.SetPropertyValue("ZIP", this.txtZip.Text);
        curProfile.SetPropertyValue("MobilePhone", txtMphone.Text);
        curProfile.SetPropertyValue("HomePhone", txtHphone.Text);
        curProfile.SetPropertyValue("DOB", txtDob.Text);
        curProfile.Save();

1
আমি জানি না কেন এটি 1000 টি ভোট পেল না। এটি অত্যন্ত সহায়ক।
pghcpa

আমি অনুমান করি যে এখানে কেউ স্ক্রোল করতে বিরক্ত করে না। এই গোল্ড, ধন্যবাদ বেদে! উপরের ডেটা সংরক্ষণ করার পরে, আমি কোনও নতুন ProfileBaseঅবজেক্ট তৈরি করে এবং অনুরোধ করেই যে কোনও জায়গা থেকে ব্যবহারকারীর ডেটা অ্যাক্সেস করতে পারি GetPropertyValue("PropName")?

আশ্চর্যজনক, এটি আমার জন্য একমাত্র উপায়। থান বেদে
ইমানুয়েল পিরোভানো

প্রথম সমস্যা, আমি কীভাবে অন্য পৃষ্ঠায় ব্যবহার করতে পারি?
ইমানুয়েল পিরোভানো

8

আপনি যখন ভিজ্যুয়াল স্টুডিওতে একটি নতুন ওয়েব সাইট প্রকল্প তৈরি করবেন তখন প্রোফাইল থেকে প্রত্যাবর্তিত অবজেক্টটি আপনার জন্য (স্বয়ংক্রিয়ভাবে) উত্পন্ন হবে। আপনি যখন কোনও ওয়েব অ্যাপ্লিকেশন প্রকল্প বা এমভিসি প্রকল্প তৈরি করেন, আপনাকে নিজের রোল করতে হবে।

এটি সম্ভবত এটির চেয়ে আরও কঠিন বলে মনে হচ্ছে। আপনাকে নিম্নলিখিতগুলি করতে হবে:

  • Aspnet_regsql.exe ব্যবহার করে একটি ডাটাবেস তৈরি করুন এই সরঞ্জামটি .NET ফ্রেমওয়ার্কের সাথে ইনস্টল করা আছে।
  • প্রোফাইলগ্রুপবেস থেকে প্রাপ্ত ক্লাসটি লিখুন বা ওয়েব প্রোফাইল বিল্ডার (ডাব্লুপিবি) ইনস্টল করুন যা ওয়েব.কনফিগের সংজ্ঞা থেকে আপনার জন্য বর্গ তৈরি করতে পারে। আমি কিছুদিন ধরে ডাব্লুপিবি ব্যবহার করে আসছি এবং এখন অবধি এটি যা প্রত্যাশিত তা করেছে। আপনার যদি প্রচুর সম্পত্তি থাকে তবে ডাব্লুপিবি ব্যবহার করে বেশ কিছুটা সময় সাশ্রয় হয়।
  • ডাটাবেসের সাথে সংযোগটি Web.Config এ সঠিকভাবে কনফিগার করা আছে তা নিশ্চিত করুন।
  • এখন আপনি নিজের প্রোফাইল শ্রেণীর একটি উদাহরণ তৈরি করতে প্রস্তুত (নিয়ন্ত্রণকারীতে)
  • আপনার সম্ভবত আপনার ভিউগুলিতে প্রোফাইল সম্পত্তি মানগুলির প্রয়োজন হবে। আমি প্রোফাইল অবজেক্টটি নিজেই দেখতে (ব্যক্তিগত বৈশিষ্ট্য নয়) দিয়ে যেতে চাই।

3

আপনি যদি কোনও ওয়েব অ্যাপ্লিকেশন প্রকল্প ব্যবহার করেন তবে আপনি বাক্সের বাইরে নকশাকালীন প্রোফাইল অবজেক্টে অ্যাক্সেস করতে পারবেন না। এখানে একটি ইউটিলিটি কল্পনানুসারে আপনার জন্য এটা আছে যে: http://weblogs.asp.net/joewrobel/archive/2008/02/03/web-profile-builder-for-web-application-projects.aspx । ব্যক্তিগতভাবে, সেই ইউটিলিটিটি আমার প্রকল্পে একটি ত্রুটি সৃষ্টি করেছিল তাই আমি প্রোফাইলবেস থেকে উত্তরাধিকারী হওয়ার জন্য আমার নিজের প্রোফাইল ক্লাসটি ঘুরিয়ে শেষ করেছি। এটি করা মোটেই কঠিন ছিল না।


3
: - System.Web.Profile এখানে কিছু নমুনা কোড weblogs.asp.net/jgalloway/archive/2008/01/19/...
nshaw


2

আমিও একই ইস্যু নিয়ে চলছিলাম। তবে প্রোফাইলবেস থেকে উত্তরাধিকার সূত্রে এমন একটি শ্রেণী তৈরি করার পরিবর্তে আমি এইচটিটিপি কনটেক্সট ব্যবহার করেছি।

ওয়েবকনফিগ ফাইলে নিম্নরূপ বৈশিষ্ট্য উল্লেখ করুন: ProfilePropertyWeb.config

এখন, নিম্নলিখিত কোডটি লিখুন:

প্রোফাইল প্রোপার্টি পিছনে কোড

কোডটি কম্পাইল করে চালান run আপনি নিম্নলিখিত আউটপুট পাবেন: -

আউটপুট


1

ওয়েব প্রোফাইল নির্মাতা আমার জন্য কাজ করে মহান। এটি তৈরি করা শ্রেণীর জোলে পোস্টের বর্ণনা অনুসারে এর মধ্যে আরও অনেক কিছু রয়েছে। এর প্রকৃত প্রয়োজন বা দরকারী আমি তা জানি না।

যাইহোক, ক্লাস উত্পন্ন করার একটি সহজ উপায় খুঁজছেন তাদের জন্য, তবে আপনি সর্বদা পারেন এমন কোনও বাহ্যিক বিল্ড সরঞ্জাম নির্ভরতা পেতে চান না

  • ওয়েব প্রোফাইল নির্মাতা ব্যবহার করুন
  • এটির সমস্ত ট্রেস মুছুন!
  • উত্পন্ন প্রোফাইল বর্গ ব্যবহার করা চালিয়ে যান

বা (স্বাক্ষরিত তবে কেবল কাজ করতে পারে)

  • একটি ওয়েব সাইট প্রকল্প তৈরি করুন
  • আপনার উপাদান তৈরি করুন
  • উত্পন্ন ক্লাসটি স্ন্যাপ করুন এবং এটি আপনার ওয়েব প্রকল্প প্রকল্পে অনুলিপি করুন

যদি এই দ্বিতীয় পদ্ধতির কাজ করে তবে কেউ আমাকে ভবিষ্যতের রেফারেন্সের জন্য জানাতে পারে


1

জোয়েল স্পলস্কির উত্তরে কেবল যুক্ত করতে চাই

আমি তার সমাধানটি কার্যকর করেছি, বিটিডব্লিউ-তে দুর্দান্তভাবে কাজ করছি!

যে ব্যবহারকারী এমন ব্যবহারকারীর প্রোফাইল পেতে চাইছেন যা আমি লগ ইন করা ব্যবহারকারী হিসাবে ব্যবহার করি নি:

web.config:

  <connectionStrings>
    <clear />
    <add name="LocalSqlConnection" connectionString="Data Source=***;Database=***;User Id=***;Password=***;Initial Catalog=***;Integrated Security=false" providerName="System.Data.SqlClient" />
  </connectionStrings>

এবং

<profile defaultProvider="SqlProvider" inherits="NameSpace.AccountProfile" enabled="true">
  <providers>
    <clear/>
    <add name="SqlProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="LocalSqlConnection"/>
  </providers>

এবং তারপরে আমার কাস্টম ক্লাস:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Profile;
using System.Web.Security;

namespace NameSpace
{
    public class AccountProfile : ProfileBase
    {
        static public AccountProfile CurrentUser
        {
            get
            {
                return (AccountProfile)
                 (ProfileBase.Create(Membership.GetUser().UserName));
            }
        }

        static public AccountProfile GetUser(MembershipUser User)
        {
            return (AccountProfile)
                (ProfileBase.Create(User.UserName));
        }

        /// <summary>
        /// Find user with matching barcode, if no user is found function throws exception
        /// </summary>
        /// <param name="Barcode">The barcode to compare against the user barcode</param>
        /// <returns>The AccountProfile class with matching barcode or null if the user is not found</returns>
        static public AccountProfile GetUser(string Barcode)
        {
            MembershipUserCollection muc = Membership.GetAllUsers();

            foreach (MembershipUser user in muc)
            {
                if (AccountProfile.GetUser(user).Barcode == Barcode)
                {
                    return (AccountProfile)
                        (ProfileBase.Create(user.UserName));
                }
            }
            throw new Exception("User does not exist");
        }

        public bool isOnJob
        {
            get { return (bool)(base["isOnJob"]); }
            set { base["isOnJob"] = value; Save(); }
        }

        public string Barcode
        {
            get { return (string)(base["Barcode"]); }
            set { base["Barcode"] = value; Save(); }
        }
    }
}

একটি যাদুমন্ত্র মত কাজ করে...


0

দুর্দান্ত পোস্ট,

কেবলমাত্র ওয়েবকনফাইগের একটি নোট যদি আপনি প্রোফাইল উপাদানটিতে উত্তরাধিকারের বৈশিষ্ট্যটি নির্দিষ্ট না করেন তবে আপনাকে নীচের মত ওয়েবকনফাইগের প্রোফাইলে উপাদানটির ভিতরে প্রতিটি স্বতন্ত্র প্রোফাইল বৈশিষ্ট্য নির্দিষ্ট করতে হবে

 <properties>
    <clear/>
    <add name="property-name-1" />
    <add name="property-name-2" />
    ..........

 </properties>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.