MVC Archives - Digital Tool Factory blog

The Digital Tool Factory Blog

How to fix problems with jquery data tables and a list of objects from Web API

The main problem is that data tables does not expect a list of objects, instead it wants a differently formatted json object, something like

data: {“Property”: Value}

Instead it’s getting a pure list, like this


Solution – list out the values in the columns property of the data table, like this

$(document).ready(function () {
“deferRender”: true,
“processing”: true,
“iDisplayLength”: 25,
“ajax”: {
“url”: “”,
“dataSrc”: “”
“columns”: [
{ “data”: “Name” },
{ “data”: “OtherColumn” }

And you’re done!

Oct 18

Written By Steve French


How to properly clone a project from Visual

So – I recently had to clone a site off of Visual lately – after some discovery, here are the proper steps

  1. Don’t try to do it from Visual Studio 2017 directly – instead just go to the project in, and click “Clone Is Visual Studio” – a dialogue window will pop up, and the combination f Visual Studio 2017 and Visual will take care of everything for you
  2. Visual Studio will then be open to the FOLDER of the newly created project.  Note the folder location, then close Visual Studio, and open the solution (.sln) file in that folder (why Visual Studio doesn’t open it immediately I don’t know)
  3. From there, you have to copy over the nuget packages – in the nuget package manager, just enter “Update-Package -reinstall” and they will all be reinstalled or installed (that solution found here – the packages are not copied into source control)

and you’re done!

Jan 18

Written By Steve French


The peculiar problem when your entity framework query returns the same row for every record

This one had me confused for a long time, several hours in fact.  There were over 8,000 rows in the table, and the for some reason the query was returning the same row 8,000 times.  After much rending of garments and gnashing of teeth, I discovered that the table in question (in a sql server 2000 database (not created by me)) had no primary key defined.

So – I copy the data into a new table, create a key with the commands

alter table TableInQuestion
add NewIDColumn int identity(1,1)

Delete the empty key field (that was what threw me, there was a column named “Id”, which was not actually and ID column.) rename “NewIDColumn” to “Id”, then point EF to the new table with the data attribute (on the object)


and everything works like a charm


Sep 17

Written By Steve French


How to fix problems with password reset tokens

For some reason, identity 2 generates password reset tokens that are not property url encoded, but does send them as part of a querystring.  Therefore – when you send out the email – the web browser will add spaces to the code, which renders it invalid.  The way around that is to base 64 encode (and decode) the code as it is sent and interpreted.  Below are the Base64 extension methods.

Also – make sure there is a guid (any guid) in the SecurityStamp column in the AspNetUsers table – that will also cause it to claim that the code is invalid.

public static string ConvertToBase64(this string str)
byte[] encbuff = Encoding.UTF8.GetBytes(str);
return HttpServerUtility.UrlTokenEncode(encbuff);

public static string ConvertFromBase64(this string str)
byte[] decbuff = HttpServerUtility.UrlTokenDecode(str);
return Encoding.UTF8.GetString(decbuff);

Jun 17

Written By Steve French


How to do a cross domain json request with jquery and mvc web api

So – I was trying to request some data from one server from another – not normally a big deal, but the data would vary depending on whether or not the user was logged in or not.  I thought just setting up CORS would work (I’m using mvc web api 2).  I thought a simple jquery .post or .get would do the job, but surprisingly the .get and .post do not send the auth cookie when making the request – you have to use the .ajax features of jQuery, as well as enabling the “SupportsCredentials” part of Cors – the relevant parts look like this

In your web api controller

[EnableCors(origins: “*”, headers: “*”, methods: “*”,  SupportsCredentials = true)]

Your javascript code should look like this

url: ‘’,
dataType: ‘json’,
xhrFields: {
withCredentials: true
crossDomain: true,
success: function (authText) {

Jan 17

Written By Steve French


How to fix 404 errors in web api 2

So – you’ve tried everything and you’re still getting weird 404 errors in web api 2.    You’ve tried the 4 main ways of fixing it, and you still get nothing – that was what I did anyway.  Finally I started a new project in the solution, and noticed that the problem only occured when other projects were referenced – and that I had several duplicate controller names.

I.E. Project A had and “AjaxController” and Project B had an “AjaxController”.  Everything works fine until you reference Project A from Project B – if you change the name of the controller in Project B the problem goes away and everything works perfectly.

Sep 16

Written By Steve French


How to fix the The type initializer for Emgu.CV.CvInvoke threw an exception problem when deploying to azure web apps

I’ve been doing a little Facial Recognition lately – then came across the following error “The type initializer for ‘Emgu.CV.CvInvoke’ threw an exception.” after I deployed to azure web apps.  Everything was working fine locally.

After doing more digging I realized that the actual .exe files for open cv were not being included in the web deployment – all that was necessary was to include the x86 and x64 directories in the project in the Solution Explorer in the project and presto!  Everything works wonderfully.

Jul 16

Written By Steve French


How to fix problems with Jquery Validate and dynamically generated forms

I recently came across the problem of validating dynamically generated forms with the jquery.validate plugin – everything worked well with the original form, but when there were multiple forms available I got peculiar syntax errors. A quick googling told me to simply add the following code


to the javascript and everything would be fine. I tried that to no avail. Then I read things more closely and realized that I needed to specify which form I wanted to validate, I changed the code to


And voila! Problem so.

Mar 15

Written By Steve French


How to use query strings in framesets with mvc 5 routing

The problem – I was working on a project that required frames – and I was trying to pass a querystring value to the frameset, as in /FramePage/?page=/SomePageOffSite.aspx – my first thought was to just pass the url of one of the frames to the frameset page as a string.  I made the model for the view a string and attempted to pass it via the usual way in the controller, i.e.

return View(“MyFramedInPage.aspx”);

My thought was that I could just use the Model property as the url, as in

frame src=”@Model” name=”main” noresize scrolling=”auto” marginheight=”0″ marginwidth=”0″

However, whenever I did that MVC would try to find a view with the url of the string (in this case SomePageOffSite.aspx – which did not exist) I was passing in the model.  I eventually figured it out – there is a feature I never use on return View – to wit – you can redirect it to another view simply by passing in the view name (I always used the redirect option) – therefore you can’t ever use a model as a string.  Lesson learned.

Feb 15

Written By Steve French


Five things should should know about the new identity membership system

I’m trying my first mvc 5 project, which more or less forces you to use the new identity framework for membership. It’s in the using Microsoft.AspNet.Identity namespace.

While a vast improvement over the original membership – I do not see any massive benefit over the MVC 4 Simple Membership system.  Here are 5 things you need to know about the identity system before you upgrade

  1. The ID column is stored as a guid, and not an int – One of my favorite things about the simple membership system was being able to use int columns for ID – no more of that
  2. In the default project, all of the membership tables will be stored in Local DB, even if you change the connection string in the web.config
  3. MVC introduces a peculiar (to me at least) way of creating the Database tables for membership in the LocalDB – in the IdentityModel.cs file in the Models folder, you will see the following bit of code

    public class ApplicationDbContext : IdentityDbContextWithCustomUser

    this will create the following tables in the Local DB

    • ASPNetUsers
    • ASPNeRoles
    • ASPNeTokens
    • ASPNetUserClaims
    • ASPNetUserLogins
    • ASPNetUserManagements
    • ASPNetUserRoles
    • ASPNetUserSecrets

    if you are running a separate database you will find it quite confusing to get the membership and the other data in the same context (the error message are rather opaque.  To fix the matter, add in the following code in your regular data context class and comment out the ApplicationDbContext : IdentityDbContextWithCustomUser in IdentityModel.cs

    public DbSet ApplicationUsers { get; set; }
    public DbSet Roles { get; set; }
    public DbSet Tokens { get; set; }
    public DbSet UserClaims { get; set; }
    public DbSet UserLogins { get; set; }
    public DbSet UserManagements { get; set; }
    public DbSet UserRoles { get; set; }
    public DbSet UserSecrets { get; set; }

    and everything will both be in the same database and the same data context.

  4. The quick and easy way of getting the User ID (comparable to WebSecurity.CurrentUserID is User.Identity.GetUserID() – that will return the guid of the user.
  5. It is pleasantly integrated with entity framework code first, and will probably be a positive feature over time.

Oct 13

Written By Steve French


Copyright 2011 Digital Tool Factory. All Rights Reserved. Powered by raw technical talent. And in this case, WordPress.