Posting data from jquery ajax call to MVC4 controller: data posted is empty

Say you want to create a new contact from an ajax call and have somthing like that:


var theContact = {
lastname: 'Smith',
firstname: 'John'
};
var theData = JSON.stringify(theContact);
$.ajax({
type: "POST",
url: "/contacts/create",
contentType: "application/json; charset=utf-8",
data: theData,
dataType: "json",
success: managesuccess
});

Then on the server, you carefully create your Contact class and the controller, paying attention to giving property names that are identical on client and server:


public class Contact
{
public string lastname;
public string firstname;
}

[System.Web.Mvc.HttpPost]
public string Create(Contact newContact)
{
// Logic
}

Only to realize that while the data is correctly posted from the client, on the server newContact properties stay desperately empty. Well, stop tearing you hair out, all you have to do is to follow best practice and adapt your Contact class by adding get/set! Like this:


public class Contact
{
public string lastname { get; set; }
public string firstname { get; set; }
}

And your data gets correclty posted, what a relief…

Copying table from one sql server instance to another instance

I have added the remote server as a linked server in Management Studio to import data from that server into my local SQL Express instance.

Running the following query works fine for most tables:

Select * Into TheTable
From [LinkedServer].[RemoteDB].[dbo].[TheTable]

But a particular table containing spatial data, I received this error message:

Objects exposing columns with CLR types are not allowed in distributed queries. Please use a pass-through query to access remote object

To solve this problem I had to run the following query:

Select * Into TheTable
From Select * from openquery([LinkedServere], ‘select * from [RemoteDB].[dbo].[TheTable]’)

And it worked fine!

 

Error when adding a new MVC4 project to the solution

When trying to add a new MVC4 project to the solution, I received the following error message:

Cannot add the item because the item to add it to is not a solution folder or the solution

 

To fix this issue, go to tools/options, click Show all settings, and in projects and solutions, just check the “Always show solution” option. Now in the solution explorer, your project will appear under its parent solution. Then you will successfully add a new MVC4 project to the same solution.

Use SQL Express with your MVC4 Single Page Application

Currently playing with Visual Studio 2012 and MVC4, I’ll quickly share how to properly set up your membership provider to use SQL Server Express.

1. Install Visual Studio 11 beta

2. Install SQL Server Express 2012

3. Start Visual Studio, create a new project, select MVC4, then Single Page Application,

4. In SQL Server Management Studio, create a new database

5. Run aspnet_regsql.exe (in C:WindowsMicrosoft.NETFramework64v4.0.30319) and follow the steps. This will create the required tables in your new database to manage the different .Net providers (membership, profiles, roles, etc..).

6. In your application web.config, add a new connection string that points to your SQL Express. Should look like the following with SQL authentication:

<add name=”SQLExpressConnection” connectionString=”Data Source=.SQLExpress;Initial Catalog=mydatabase;User Id=sa;Password=password” providerName=”System.Data.SqlClient” />

And Windows authentication:

<add name=”SQLExpressConnection” connectionString=”Data Source=.SQLExpress;Initial Catalog=mydatabase;Integrated Security=true” providerName=”System.Data.SqlClient” />

7. Still in the web.config file, adapt the the DefaultMembershipProvider or add a new one in the <membership><providers> section. To actually have your application use your provider, make sure you set the defaultProdiver attribute of the mmbership node to the provider you want to use. Otherwise, the machine.config settings will be used. And make sure, in your provider, to set the connectionStringName to the connection string you defined above.

 

And you’re good to go!

The Plugin Profiler

I recently discovered the Dynamics CRM plugin profiler.

The Plug-in Profiler is a tool that profiles the execution of plug-ins for an enhanced debugging experience in Microsoft Visual Studio 2010. This tool, which can be run from the Command Prompt window or from within the Plug-in Registration tool, makes developing plug-ins against Microsoft Dynamics CRM 2011 and Microsoft Dynamics CRM Online quicker and easier. In addition, users can profile the execution of failing plug-ins and send the results to the plug-in developer or ISV for analysis. The developer can replay the plug-in execution and debug the plug-in remotely even when disconnected from the Microsoft Dynamics CRM server. The Plug-in Profiler is available in the 5.0.5 release and newer releases of the Microsoft Dynamics CRM SDK

The tool can be used in either the debug or replay mode. Each of these modes is described in the following sections.

1. Debug a Plug-in using the Plug-in Profiler

To debug a plug-in

  1. Build the Plug-in Registration tool according to the instructions in its Readme file. The tool can be found in the ToolsPluginRegistration folder of the SDK download.
  2. Run the Plug-in Registration tool.
  3. Connect to a Microsoft Dynamics CRM server and organization. For more information on connecting to a server and organization, refer to the SDK topic: Walkthrough: Register a Plug-in Using the Plug-in Registration Tool.
  4. Register a plug-in and step on the Microsoft Dynamics CRM server. Keep a copy of the debug compiled plug-in assembly on the computer where you are running the tool.
  5. In the tool’s main window, select Install Profiler. You will now see a Plug-in Profiler node in the list.
  6. Select a plug-in step and click Profile to enable profiling.
  7. Perform the operation in Microsoft Dynamics CRM that causes the plug-in to run. For example, if the step is configured for an update to an account, then update an account.
  8. After the plug-in throws an exception and the Business Process Error dialog is displayed, click Download Log File and save this file. Alternately, if the plug-in does not throw an exception, click Stop Profiling.
  9. In the Plug-in Registration tool, click Debug.
  10. In the Debug Existing Plug-in dialog box, provide the location of the previously saved log file.
  11. In Step #2, specify the location of the plug-in assembly.
  12. Launch Visual Studio 2010 and attach the debugger to the PluginRegistration.exe process.
  13. Set a breakpoint in the plug-in code.
  14. Click Start Plug-in Execution in the Debug Existing Plug-in dialog box.
  15. After a slight delay, the plug-in will execute using the same execution context that was passed to it by the Microsoft Dynamics CRM server and the debugger will stop execution on the breakpoint that you previously set.
  16. Continue debugging the plug-in as you would normally do. Any traces that the plug-in outputs are shown in the Debug Existing Plug-in dialog box.

At this point you can alter the plug-in code, build it, re-attach the debugger to the PluginRegistration.exe process, and click Start Plug-in Execution to continue with your debugging session. While performing these operations, you do not need to close the Debug Existing Plug-in form.

You do not need to re-deploy the plug-in to the Microsoft Dynamics CRM server until after you have fixed the code problem. This debugging scenario works even if you have an optimized version of the plug-in on the server and a debug version of the plug-in on the computer where you are debugging.

2. Replay Plug-in Execution

Replaying plug-in execution does not require a connection to a Microsoft Dynamics CRM server and organization. The advantage of this method is that you can obtain the plug-in execution profile from a customer and debug the plug-in remotely. A restriction of the replay feature is that you cannot change the sequence of calls your plug-in code makes in the debugger while you are debugging.

The replay feature provides the plug-in with a snapshot of the call data and event execution context from the Microsoft Dynamics CRM server. You are getting the same events, GUIDs, and so on from calls to the Organization service but no data is being modified on the server as you debug the plug-in. During the debugging procedure in the previous section, the plug-in actually connects to the server and makes calls in real time.

To replay plug-in execution

  1. Launch Visual Studio 2010 and attach the debugger to the PluginRegistration.exe process.
  2. Click Replay Plug-in Execution in the Debug Existing Plug-in dialog box.
  3. Enter the log and plug-in assembly locations in the dialog box.
  4. Click Start Plug-in Execution.
  5. Debug the plug-in as you would normally.

 

3. Run the Plug-in Profiler Standalone

The profiler can be executed from a Prompt window independent of the Plug-in Registration tool. This is useful to obtain the plug-in profile log from a customer’s Microsoft Dynamics CRM server to debug a failed plug-in. A developer can then use that log to replay the plug-in’s execution in the Plug-in Registration tool and debug the plug-in using Visual Studio 2010.

To run the plug-in profiler from a command prompt

  1. Open a Command Prompt window and set the working directory to the Bin folder in the SDK download.
  2. Type the command: PluginProfiler.Debugger.exe /?.
  3. Review the supported parameter list and re-run the PluginProfiler.Debugger.exe program with the appropriate parameters.