IIS not serving ASP.NET pages


It mostly happens when IIS is installed after .NET is installed. So in this case we need to make use of aspnet_regiis.exe utility.
1) Go to command prompt
2) Go to the following path
“C:WINDOWSMicrosoft.NETFrameworkv2.0.50727”
depending on the version.
3) Enter “aspnet_regiis.exe -i”
4) It will display the message finished installing
5) Open your IIS
6) Select web service extensions
7) Click on Allow for ASP.NET v2.0.50727

That’s it . Now the IIS has been configured properly

Changing authentication mode for Sql Server express edition


One way of doing it is through sql server management studio explained over here

http://msdn.microsoft.com/en-us/library/ms188670.aspx

But if you haven’t installed the management studio than in that case you need to make following change in the registry

HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Microsoft SQL server / MSSQL.1/ MSSQLSERVER/ LoginMode

Click on it change it’s value from 1 to 2.

Then Restart your sql server service !!!

After you have done this you need to enable you sa account for sql server authentication for this follow these steps

1) Open SQL Server Management Studio Express and Login
2) In Object Explorer, click Security followed by Logins
3) Right click sa user and select Properties.
4) Uncheck Enforce password policy
5) Select Status. Click the Grant and Enabled radio buttons. Click OK
6) Restart your database server and select restart.

That’s it

Writing a simple Event Reciever or Event Handler in Sharepoint


What is Event handling ?

The ability to catch certain user actions in code and respond programmmatically. These are the classes which we can inherit and write event handlers or receivers against them.

SPItemEventReceiver

SPListEventReceiver

SPWebEventReceiver

Which user actions you can catch?

ItemFileMove,IFMoving, ItemUpdated,ItemUpdating, ItemCheckedIn/Out, ItemCheckingIn/ItemChecingOut, ItemAdded,IAdding, ItemAttachementAdded/Adding, ItemDeleted/Deleting.

What is template id for customlist, document library, survey?

100 Custom List 101 Document Library 102 Survey 103 Links List 104 Announcements 105 Contacts

106 Events List 107 Tasks List 108 Discussion Board 109 Picture Library

Explain the steps for creating event handlers?

1) Create a class library project.

2) Add reference to Microsoft.Sharepoint.dll

3) Inherit the class SPItemEventReceiver

4) Override the method against which you want to attach the event handler.

e.g. for itemdeleting

namespace MyEventHandler{

public class ItemDeletingHandler : SPItemEventReceiver{

public override void ItemDeleting(SPItemEventProperties properties){

// We want to attach the eventhandler against a document library

// named MyDocumentLibrary

if(properties.ListTitle == “MyDocumentLibrary”){

// only the admin user has right to delete the uploaded document

if (!properties.UserLoginName.Contains(“domainnameadminUserName”)){

properties.ErrorMessage = “You don’t have sufficient privelege to delete on list “+properties.ListTitle;

properties.Cancel = true;}}}}}

5) Sign the assembly and put it in GAC i.e. c:windowsassembly

6) Create a new folder with the same name as your eventhandler at the following path

c:program filescommon filesmicrosoft sharedweb server extension12templateFeatures folder

7) Create two files feature.xml and elements.xml at the newly created folder.

8) Take feature.xml file of announcement and make the necessary changes to it.

<?xml version=1.0 encoding=utf-8?>

<Feature Id=C50FF499-B52A-471f-A9FB-36A49E2FA49F

Title=MyEventHandler

Description=For restricting delete of a list

Scope=Web

xmlns=http://schemas.microsoft.com/sharepoint/>

<ElementManifests>

<ElementManifest Location=Elements.xml/>

</ElementManifests>

</Feature>

9) Within elements.xml specify

<?xml version=1.0 encoding=utf-8?>

<Elements xmlns=http://schemas.microsoft.com/sharepoint/>

<Receivers ListTemplateId=101>

<Receiver>

<Name>MyEventHandler</Name>

<Type>ItemDeleting</Type>

<SequenceNumber>20000</SequenceNumber>

<Assembly>

MyEventHandler, Version=1.0.0.0,

culture=neutral, PublicKeyToken=e185cb2eba5d0774

</Assembly>

<Class>MyEventHandler.ItemDeletingHandler</Class>

<Data></Data>

<Filter></Filter>

</Receiver>

</Receivers>

</Elements>

Get the values for assembly tag by right clicking the assembly and selecting properties within the GAC.

If we have multiple eventhandler attached to a same event we can specify which handler should be executed first through SequenceNumber tag. It’s value should start from 20000

10) Now install the feature

stsadm.exe -o installfeature -filename MyEventHandlerfeature\Feature.xml

11) Activate the feature

stsadm -o activatefeature -filename MyEventHandlerfeature\Feature.xml -URL http://localhost.

That’s it…

Creating a simple web part with controls in SharePoint


In case when we need to add controls to our web part we need to override the CreateChildControls method of the base WebPart class along with Render method.

Let’s take a simple example for it,  a kind of sample calculator which shows sum of two numbers ]

For this we have added 2 labels, 3 textboxes and 1 button.

On Click of the button the sum of the values entered in textbox1 and textbox2 would be displayed in the textbox3.

SampleCalculatorWebPart
SampleCalculatorWebPart

Following is the code for the above web part.

namespace SampleCalculator

{

public class MyCalculator :WebPart

{

protected Label lblFirstValue;

protected Label lblSecondValue;

protected TextBox txtFirstValue;

protected TextBox txtSecondValue;

protected Button btnCalculate;

protected TextBox txtTotal;

// controls would be initialized and added here

protected override void CreateChildControls(){

lblFirstValue = new Label();

lblSecondValue = new Label();

txtFirstValue = new TextBox();

txtSecondValue = new TextBox();

btnCalculate = new Button();

txtTotal = new TextBox();

lblFirstValue.Text = “Enter First Value :”;

lblSecondValue.Text = “Enter Second Value :”;

btnCalculate.Text = “Calculate”;

// adding eventhandler for click of btnCalculate

btnCalculate.Click += new EventHandler(btnCalculate_Click);

this.Controls.Add(lblFirstValue);

this.Controls.Add(txtFirstValue);

this.Controls.Add(lblSecondValue);

this.Controls.Add(txtSecondValue);

this.Controls.Add(btnCalculate);

this.Controls.Add(txtTotal);

}

void btnCalculate_Click(object sender, EventArgs e){

int total = CalculateSum( Convert.ToInt32(txtFirstValue.Text), Convert.ToInt32(txtSecondValue.Text));

txtTotal.Text= total.ToString();

}

protected override void Render(HtmlTextWriter writer){

// for proper alignment of the controls added

// we can create a table

// <Table>

//<tr><td><td></tr>

//<tr><td><td></tr>

//<tr><td><td></tr>

//</Table>

writer.RenderBeginTag(HtmlTextWriterTag.Table);

writer.RenderBeginTag(HtmlTextWriterTag.Tr);

writer.RenderBeginTag(HtmlTextWriterTag.Td);

lblFirstValue.RenderControl(writer);

writer.RenderEndTag(); //td

writer.RenderBeginTag(HtmlTextWriterTag.Td);

txtFirstValue.RenderControl(writer);

writer.RenderEndTag(); //td

writer.RenderEndTag(); // tr


writer.RenderBeginTag(HtmlTextWriterTag.Tr);

writer.RenderBeginTag(HtmlTextWriterTag.Td);

lblSecondValue.RenderControl(writer);

writer.RenderEndTag(); //td

writer.RenderBeginTag(HtmlTextWriterTag.Td);

txtSecondValue.RenderControl(writer);

writer.RenderEndTag(); //td

writer.RenderEndTag(); // tr


writer.RenderBeginTag(HtmlTextWriterTag.Tr);

writer.RenderBeginTag(HtmlTextWriterTag.Td);

btnCalculate.RenderControl(writer);

writer.RenderEndTag(); //td

writer.RenderBeginTag(HtmlTextWriterTag.Td);

txtTotal.RenderControl(writer);

writer.RenderEndTag(); //td

writer.RenderEndTag(); // tr

writer.RenderEndTag();// table

}

private int CalculateSum(int a, int b){

return a + b;}

}

}

Put the following attribute in your assemblyinfo.cs file

[assembly: AllowPartiallyTrustedCallers]


Strong sign the assembly and install it in GAC.

Open the web.config of your site where you want this webpart

Make a safecontrol entry within the web.config for your webpart.

<SafeControl Assembly=SampleCalculator, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7c6ce78ef8448ffa Namespace=SampleCalculator TypeName=* Safe=True />

The name of the assembly,it’s version, culture and public key token information can be found by right clicking the assembly within gac and selecting properties.

Bye..

Writing custom properties for web parts in Sharepoint


For adding custom properties to our web part we need to do the following

1) Create property.

2) Decorate the property with the following attributes

WebBrowsable – To allow your property to be visible within SharePoint.

WebDisplayName– To provide display name to the property.

WebDescription– To provide description for that property.

Personalizable – To define the scope of it i.e either User or Shared through PersonalizationScope enumeration.

Let’s take a simple example wherein we have 2 properties defined, user will enter value for them and finally when the web part is rendered, we would be displaying their sum within the web part.

namespace AdditionWebPart

{

public class SumWebPart : WebPart{

private int firstVariable;

[WebBrowsable(true),

WebDisplayName(“First Value”),

WebDescription(“Enter value for first variable”),

Personalizable(PersonalizationScope.User)]

public int FirstVariable

{

get { return firstVariable; }

set { firstVariable = value; }

}

private int secondVariable;

[WebBrowsable(true),

WebDisplayName(“Second Value”),

WebDescription(“Enter value for second variable”),

Personalizable(PersonalizationScope.User)]

public int SecondVariable

{

get { return secondVariable; }

set { secondVariable = value; }

}

protected override void Render(System.Web.UI.HtmlTextWriter writer){

writer.Write(“The total is “ +this.calcTotal(this.firstVariable,this.secondVariable));

}

private int calcTotal(int a, int b){

return a + b;

}}}

Put the following attribute in your assemblyinfo.cs file

[assembly: AllowPartiallyTrustedCallers]


Strong sign the assembly and install it in GAC.

Open the web.config of your site where you want this webpart

Make a safecontrol entry within the web.config for your webpart.

<SafeControl Assembly=AdditionWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5f7492d3f59e0c4b Namespace=AdditionWebPart TypeName=* Safe=True />

The name of the assembly,it’s version, culture and public key token information can be found by right clicking the assembly within gac and selecting properties.

Bye….

Creating a custom hello world SharePoint web part


1) Create a new class library project.

2) Add reference to system.web.dll

3) Inherit the following class

System.Web.UI.WebControls.WebParts.WebPart class.

4) Override the Render method.

using System;

using System.Collections.Generic;

using System.Text;

using System.Web.UI;

namespace MyWebPart

{

public class MyFirstWebPart : System.Web.UI.WebControls.WebParts.WebPart

{

protected override void Render(HtmlTextWriter writer)

{

writer.Write(“<font name=’Georgia’><b>Hello World </b></font>”);

}

}

}

Put the following attribute in your assemblyinfo.cs file

[assembly: AllowPartiallyTrustedCallers]

5) Strong sign the assembly and install it in GAC.

6) Open the web.config of your site.

7) Make a safecontrol entry within the web.config for your webpart.

<SafeControl Assembly=MyWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=4e225690feb84c40 Namespace=MyWebPart TypeName=* Safe=True />

The name of the assembly,it’s version, culture and public key token information can be found by right clicking the assembly within gac and selecting properties.

Or to get the public key token you can open the .NET Framework command prompt and type the following command sn -t “assemblyname.dll”

We can deploy assembly in the bin directory of the web application also, but in this case it would be partially trusted and could result in security exception which could have been unhandled, so we need to make the following change in the web.config of the application

<trust level=”WSS_Minimal” originUrl=”” />

to

<trust level=”WSS_Medium” originUrl=”” />


Go to webparts gallery within your site, click on new, select your webpart and populate the gallery.

That’s it!!