Posts

Showing posts with the label Code

ASP.NET MVC 4 SimpleMembershipProvider Website Administration Tool, ASP.NET Configuration

----------------------
Updated for ASP.NET MVC 5 and Identity 2.0. Includes an Azure Site Extension: http://aaron-hoffman.blogspot.com/2016/08/aspnet-mvc-5-user-admin.html
----------------------

----------------------
ASP.NET MVC 4 Membership Overview: http://aaron-hoffman.blogspot.com/2013/02/aspnet-mvc-4-membership-users-passwords.html
----------------------

The built in ASP.NET Configuration Website Administration Tool provided by Microsoft and Visual Studio left something to be desired. I have developed an alternative that can be used with ASP.NET MVC 4 SimpleMembershipProvider.

Code available here: https://github.com/StoneFinch/SmpMaintenance

Current functionality at the time of this writing:
  - Add New Users
  - Bulk Add New Users
  - Search Users
  - Add New Roles
  - Edit Existing Users
  - Reset User Password (on Edit User page)
  - Add Users to Roles
  - Remove Users from Roles


Hope this helps,
Aaron


ASP.NET MVC 4 SimpleMembershipProvider, Web Security Roles Add User To Role SQL, Remove User From Role SQL

Using SQL Profiler, below is the SQL that is executed when the ASP.NET MVC 4 SimpleMembershipProvider's System.Web.Security.Roles.AddUserToRole() method and RemoveUserFromRole() method are called:

Text below in bold is dynamic and represents the UserName and RoleName property passed into the AddUserToRole()  method (or the UserId,RoleId associated with the UserName,RoleName).


Roles.AddUserToRole("UserName", "RoleName");
exec sp_executesql N'SELECT [UserId] FROM [UserProfile] WHERE (UPPER([UserName]) = @0)',N'@0 nvarchar(25)',@0=N'USERNAME'


exec sp_executesql N'SELECT RoleId FROM webpages_Roles WHERE (RoleName = @0)',N'@0 nvarchar(5)',@0=N'RoleName'


exec sp_executesql N'SELECT COUNT(*) FROM [UserProfile] u, webpages_UsersInRoles ur, webpages_Roles r Where (u.[UserName] = @0 and r.RoleName = @1 and ur.RoleId = r.RoleId and ur.UserId = u.[UserId])',N'@0 nvarchar(8),@1 nvarchar(8)',@0=N'UserName',…

ASP.NET MVC 4 SimpleMembershipProvider, Web Security Roles Create Role SQL, Delete Role SQL

----------------------
ASP.NET MVC 4 Membership Overview: http://aaron-hoffman.blogspot.com/2013/02/aspnet-mvc-4-membership-users-passwords.html
----------------------

Using SQL Profiler, below is the SQL that is executed when the ASP.NET MVC 4 SimpleMembershipProvider's System.Web.Security.Roles.CreateRole() method and DeleteRole() method are called:

Text below in bold is dynamic and represents the RoleName property passed into the CreateRole() method (or the RoleId associated with the RoleName).


Roles.CreateRole("RoleName");
exec sp_executesql N'SELECT RoleId FROM webpages_Roles WHERE (RoleName = @0)',N'@0 nvarchar(8)',@0=N'RoleName'



exec sp_executesql N'INSERT INTO webpages_Roles (RoleName) VALUES (@0)',N'@0 nvarchar(8)',@0=N'RoleName'

Roles.DeleteRole("RoleName");exec sp_executesql N'SELECT RoleId FROM webpages_Roles WHERE (RoleName = @0)',N'@0 nvarchar(8)',@0=N'RoleName'

exec sp_executesql…

Knockout.js binding syntax bind to root, self, current context

When using knockout.js if your ViewModel is an array and you want to bind to the entire ViewModel, the syntax to bind to the ViewModel root, when the root is the current context:

<ul data-bind="foreach: $data"> <li> <p data-bind="text: SomeTextProperty"> </p> </li> </ul>


The XAML syntax equivalent when the DataContext is an array:

<itemscontrol ItemsSource="{Binding Path=.}"> ... </itemscontrol>


Hope this helps,
Aaron

ASP.NET MVC 4 SimpleMembershipProvider, WebMatrix WebSecurity CreateUserAndAccount Create New User SQL

----------------------
ASP.NET MVC 4 Membership Overview: http://aaron-hoffman.blogspot.com/2013/02/aspnet-mvc-4-membership-users-passwords.html
----------------------

Using SQL Profiler, below is the SQL that is executed when the ASP.NET MVC 4 SimpleMembershipProvider's WebMatrix.WebData.WebSecurity.CreateUserAndAccount() method is called:

Text below in bold is dynamic and represents the UserName and Password properties passed to the CreateUserAndAccount() method as well as the UserId generated as part of user creation.

Similarly, the name of the UserId and UserName columns, and the name of the UserProfile table may also be different based on your specific configuration.


exec sp_executesql N'SELECT [UserId] FROM [UserProfile] WHERE (UPPER([UserName]) = @0)',N'@0 nvarchar(23)',@0=N'UserName'

exec sp_executesql N'INSERT INTO [UserProfile] ([UserName]) VALUES (@0)',N'@0 nvarchar(23)',@0=N'UserName'

exec sp_executesql N'SELECT [UserId]…

ASP.NET MVC 4 SimpleMembershipProvider, WebMatrix WebSecurity Login SQL

----------------------
ASP.NET MVC 4 Membership Overview: http://aaron-hoffman.blogspot.com/2013/02/aspnet-mvc-4-membership-users-passwords.html
----------------------

Using SQL Profiler, below is the SQL that is executed when the ASP.NET MVC 4 SimpleMembershipProvider's WebMatrix.WebData.WebSecurity.Login() method is called:

The UserName below (in bold) is dynamic, it represents the UserName parameter passed to the Login() method.

Similarly, the name of the UserId and UserName columns, and the name of the UserProfile table may also be different based on your specific configuration.

exec sp_executesql N'SELECT [UserId] FROM [UserProfile] WHERE (UPPER([UserName]) = @0)',N'@0 nvarchar(25)',@0=N'UserName'

exec sp_executesql N'SELECT COUNT(*) FROM webpages_Membership WHERE (UserId = @0 AND IsConfirmed = 1)',N'@0 int',@0=1

SELECT m.[Password] FROM webpages_Membership m, [UserProfile] u WHERE m.UserId = 1 AND m.UserId = u.[UserId]


exec sp_executesql N…

Edit Default Visual Studio 2012 Item and Project Templates

After adding a new file or project within a Visual Studio solution there are certain settings that I always update.  Follow the steps below to edit the default templates so these settings become the default.

Visual Studio 2012 Project and Item Template files are located here:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\ItemTemplates
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\ProjectTemplates


Add "public" to all new C# class files:
Edit the Class.cs file by adding the word "public" in front of the word "class"

The Class.cs can be found here:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class\Class.cs

After you're done, it should look like this:
using System; using System.Collections.Generic; $if$ ($targetframeworkversion$ >= 3.5)using System.Linq; $endif$using System.Text; $if$ ($targetframeworkversion$ >= 4.5)using System.Threading.Tasks; $endif$ namespace …

JavaScript Null Checking, Undefined and ! Unary Operator

Image
Google searches of "JavaScript null check" and "How to check for null in JavaScript" were returning results that left something to be desired in my opinion, so I compiled this list.

See the code live here: JsFiddle: http://jsfiddle.net/aaronhoffman/DdRHB/5/
Code also available here:
https://github.com/aaronhoffman/utils/blob/master/JavaScript/NullChecks.js


Comparison Chart:



Hope this helps,
Aaron


p.s. I used a great tool Regex Pixie http://www.regexpixie.com/ by StoneFinch http://stonefinch.com/ to generate most of the code in this example (disclaimer, I currently work for them, however I would never promote a tool I don't use myself.)

ASP.NET MVC 4 Membership, Users, Passwords, Roles, Profile, Authentication and Authorization

----------------
The easy way: Azure Site Extension to Add/Edit Users and Roles: 
http://aaron-hoffman.blogspot.com/2016/08/aspnet-mvc-5-user-admin.html
https://www.nuget.org/packages/AspNetUserMaintenanceAzureSiteExtension/
(old: https://www.siteextensions.net/packages/AspNetUserMaintenanceAzureSiteExtension/)
----------------

----------------
TLDR: Search for this line in your project and update it:

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
----------------

There is a new Membership Provider in ASP.NET MVC 4 that can be used for Membership, Users, Passwords, Roles, Profile, Authentication and Authorization!  It is called the Simple Membership Provider.  It uses the WebMatrix WebData WebSecurity class as a facade.

The Old Way
You will no longer need to execute the old .NET 2.0 aspnet_regsql.exe like this:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe -sqle…

Visual Studio Macro to Break on Every Method in File

While tracking down the source of certain features (read bugs) within overly complex applications, I have sometimes found it useful to break on every call to every method within a file.

The functionality to "Break on Every Method" is not built into Visual Studio, but it is possible to set up the necessary break points through a macro.  I did not originally write this macro, but while trying to find it again at a recent job I couldn't, so I decided to post it here for safe keeping.  It is fairly primitive, but it gets the job done.  Simply place the cursor within the file you are working with right before the first method you want to break on.  The macro will then search through the file for each opening brace "{" and place a break point at each one.  Hope it helps someone.

To "install" this macro simply open up your macro explorer, edit a module and paste this macro/method in.  If you do not have any macros you will need to record an empty macro first…

Microsoft Excel Find Next Value Change in Column Macro

Image
I find that if I’m working with data from a SQL query it is easier to manipulate, sort, and filter that data in Excel than it is in the SQL query itself.  I am also a fan of using Excel as a Data Visualization/Reporting tool.  Because of these two things I tend to work in Excel quite a bit and have developed a few macros to help make my life easier.

Many times when you are working with data from a SQL query and you sort on a “dimension” column (example below) you will have many repeated values in a single column.  If you want to page through the data and find when the values changes from one to the next, Excel does not have the built in ability to do this.  However the Macro to perform this function is pretty easy to write.

In the image below the data was sorted on the “Type” column.  If cell B3 is selected and the FindNextValueChangeInColumn macro is run, cell B7 would be selected.  If it is run a second time cell B12 would be selected and so on.


Here are the Macros to copy and paste…

Visual Studio Code Snippet for a Notify Property (INotifyPropertyChanged)

Image
updated version can be found here: https://aaron-hoffman.blogspot.com/2017/12/vs2017-visual-studio-2017-code-snippet-wpf-inotifypropertychanged.html

In the ViewModel classes of projects following the M-V-VM pattern it is often necessary to raise a "PropertyChanged" event (to assist with INotifyPropertyChanged interface implementation) from within a property's setter.  This is a tedious task that will hopefully someday be solved by using the Compiler as a Service...  But until that day comes, I've created a handy Visual Studio Code Snippet for myself to help automate this task.  The XML for the code snippet, and an example of the code it produces are below (note the Base Class and the OnPropertyChanged() method call).  Continue reading to see how to "install" and implement this snippet.


--------

<?xmlversion= "1.0 "encoding= "utf-8 " ?><CodeSnippetsxmlns= "http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet "> …

Silverlight Color Picker ComboBox (DropDownList)

During a Silverlight project I finished up a while ago I needed to create a "simple" Color Picker ComboBox (or DropDownList for us ASP.NET Developers).  By "simple" I mean limited to only a handful of colors, not as complex as something like Paint.NET (read PhotoShop) would provide.  This is the easiest solution that I found.

The first thing you need to know is that the ComboBox has an ItemTemplate.  This template allows you to completely control the look and feel of each entry in the ComboBox.  From simple things like binding to a property to change the background color (hint hint, that is what we are about to do), to more complex things like changing the entire template based on the type of class being bound to this item in the ComboBox (ex: the ComboBox is bound to a list of "fruits" some are apples and some are bananas.  The apples all use one template, the bananas use a completely different template - powerful).

We'll be binding this ComboBox to …

Simple Keystroke Automation in .NET (Scott Hanselman's Http Button)

Image
--
Scott Hanselman (http://www.hanselman.com/http://twitter.com/shanselman) recently tweet'd, "I need a keyboard with an "http://www." button."

To which I replied, "@shanselman you still type the "http" part? I didn't think you had to anymore..."  Oooh, hahahaha, how smart and funny am I!?  ....Apparently not very... :-)

shanselman responded (as well as to others with the same smart remarks), "@aaron_hoffman in tweetdeck or Twitter, you do."  --Aaaah, I get it now, he's not in a browser! okay, he has me in Check.

Now I just had to solve this problem.  Well automation/degree in laziness (with years of laziness experience) to the rescue!  At first I thought PowerShell - but since I am on a WinXP SP2 machine, that wouldn't do.  I'll have to fall back to the console app & desktop shortcut combination of yester-system.

Steps to Simple Keystroke Automation (w/ WinXP SP2 Handicap)

1. Create .NET Console App
2. Write/B…

Reaction Time Tester

I wrote this Silverlight app for my Cousin. The trickiest part was raising an event after a random amount of time for the "Wait..." portion of the test. I ended up using a "DispatcherTimer" and set the interval to a Random amount of seconds.




Have Fun!

Monty Hall Test Simulator

Jeff Atwood (Coding Horror, StackOverflow) recently wrote a blog post about the Monty Hall Problem. So I thought I'd write a little app that simulates the tests. I have always thought the contestant has three options, Always Switch (66%), Always Stay (33%), AND Pick Again (50%). People who say your chance is 50/50 after one door is taken out of the equation, are Correct, IF you randomly choose the second door at that time. Check out the app below.

WD = Winning Door.
FC = First Choice.
RD = Removed Door.
SC = Second Choice.



LINQ is not just LINQ to SQL

Deconstructing a LINQ Statement

(download source code: http://aaronhoffman.googlecode.com/files/AaronHoffmanLinqDemov01.zip)


LINQ is a valuable tool, but because of the way it is usually demonstrated, developers think that its only use is for querying a Microsoft SQL Server database. This is because it is usually being demonstrated along with "LINQ to SQL". LINQ is not just LINQ to SQL. I like to think of LINQ as a shorthand (or syntax shortcut) way of writing code - a way to write less lines of code (or simplify code), but still perform the same operations (kind of like what foreach is to the for loop).

I would like to demonstrate LINQ in a way that does not use LINQ to SQL. I will break down a LINQ statement into lines of code that developers might be more familiar with in an attempt to show what is going on under the covers. I will start with code that hopefully everyone has seen/written before, then build up to a LINQ statement that performs the same operation. This way y…