I had a problem where I had an MVC project that used the Telerik MVC Grid.
This uses jquery-1.7.1-min.js.
But I also updatd my project folder to include jquery-1.8.2.js elsewhere in order to use JQuery UI's tooltips.
When I ran the project I got a Javascript error:
Object doesn't support this property or method on
$(document).tooltip();
This was because JQuery was referenced twice in the the HTML outputs.
So I then deleted the jquery-1.7.1-min.js that was present in Telerik's 2012.2.607 folder. However this then caused another problem whereby javascript was complaining that
0x800a01b6 - Microsoft JScript runtime error: Object doesn't support property or method 'tDropDownList'
This was because Telerik's JQuery was removed.
The solution was to use:
@Scripts.Render("~/bundles/jquery")
at the top of the HTML page and set JQuery(false) on Telerik:
@(Html.Telerik().ScriptRegistrar().Globalization(true).jQuery(false).DefaultGroup(group => group.Combined(true).Compress(true)))
This results in JQuery being added at the top of the HTML and prevents Telerik adding another script tag.
Thursday, 11 October 2012
Telerik MVC Extensions Grid - AJAX in cell editing (batch editing) with readonly columns
If you are using AJAX in-place editing, if a column is readonly then the value will not be passed to the controller on the update AJAX method.
The solution is to remove the ReadOnly attribute from the datasource viewmodel, and instead apply it to the column.
ViewModel
public class TransactionViewModel {
[ [ReadOnly(true)]
public Int32 DealNum { get; set; }
}
View
columns.Bound(m => m.DealNum).Width(70).Title("Deal No.").ReadOnly();
Other references
http://www.telerik.com/community/forums/aspnet-mvc/grid/mvc-grid-readonly-field-gets-null-when-updated.aspx
The solution is to remove the ReadOnly attribute from the datasource viewmodel, and instead apply it to the column.
ViewModel
public class TransactionViewModel {
[
public Int32 DealNum { get; set; }
}
View
columns.Bound(m => m.DealNum).Width(70).Title("Deal No.").ReadOnly();
Other references
http://www.telerik.com/community/forums/aspnet-mvc/grid/mvc-grid-readonly-field-gets-null-when-updated.aspx
Tuesday, 2 October 2012
EF5.0 Code First - The model backing the 'xxxContext' context has changed since the database was created. Consider using Code First Migrations to update the database
I created a simple bit of code to load data from an existing table into a POCO. However as I was developing the POCO I got this error.
The model backing the 'xxxContext' context has changed since the database was created. Consider using Code First Migrations to update the database
This is because EF creates a table [dbo].[__MigrationHistory] when it is first run and stores the model in there. If you subsequently change the POCO it differs from the saved model and this error is thrown.
My solution was to delete the table and thus any reference to the historical model.
using (var context = new EndurContext())
{
using (var conn = new SqlConnection(connections["EndurContext"]))
{
using (var command = conn.CreateCommand())
{
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "[trade].[GetPhysFixedDeals]";
conn.Open();
using (var reader = command.ExecuteReader(CommandBehavior.CloseConnection))
{
var jobs =
((IObjectContextAdapter) context).ObjectContext.Translate<PhysicalFixedDeal>(reader);
}
}
}
}
The model backing the 'xxxContext' context has changed since the database was created. Consider using Code First Migrations to update the database
This is because EF creates a table [dbo].[__MigrationHistory] when it is first run and stores the model in there. If you subsequently change the POCO it differs from the saved model and this error is thrown.
My solution was to delete the table and thus any reference to the historical model.
using (var context = new EndurContext())
{
using (var conn = new SqlConnection(connections["EndurContext"]))
{
using (var command = conn.CreateCommand())
{
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "[trade].[GetPhysFixedDeals]";
conn.Open();
using (var reader = command.ExecuteReader(CommandBehavior.CloseConnection))
{
var jobs =
((IObjectContextAdapter) context).ObjectContext.Translate<PhysicalFixedDeal>(reader);
}
}
}
}
Friday, 21 September 2012
HandleErrorAttribute, Elmah and the Yellow Screen of Death
If you apply the HandleErrorAttribute to an MVC application then it will redirect you to the Error page rather than serve up the Yellow Screen of Death.
But customErrors must be turned on for this to work.
public class CustomHandleErrorAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext context)
{
base.OnException(context);
// context.ExceptionHandled will return true
if (!context.ExceptionHandled)
return;
}
Elmah will only pickup on UNHANDLED exceptions. Under normal circumstances it won't do anything with the UI, it will leave the Yellow Screen of Death intact if one is served. However it will pickup the error and email and log as appropriate.
To use Elmah in conjunction with the HandleErrorAttribute you have to add code to fire off Elmah even though the exception was handled.
A simple example is shown below (with a CustomHandleErrorAttribute)
public
class CustomHandleErrorAttribute : HandleErrorAttribute
{
private readonly ILog log;
public CustomHandleErrorAttribute(ILog log)
{
this.log = log;
}
public override void OnException(ExceptionContext context)
{
// Give the framework a chance to handle the exception
base.OnException(context);
// If the exception was not handled then allow the exception to bubble up - Elmah will catch it
if (!context.ExceptionHandled) return;
// If the exception was handled by the framework then log it for the record
var httpContext = context.HttpContext.ApplicationInstance.Context;
var signal = ErrorSignal.FromContext(httpContext);
signal.Raise(context.Exception, httpContext);
log.Error(context.Exception);
}
}References:
http://blog.dantup.com/2009/04/aspnet-mvc-handleerror-attribute-custom.html
But customErrors must be turned on for this to work.
<system.web>
<customErrors mode="On">
</customErrors>
</system.web>
Doing this will handle exceptions (e.g. the ExceptionContext's ExceptionHandled property will be set to true).public class CustomHandleErrorAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext context)
{
base.OnException(context);
// context.ExceptionHandled will return true
if (!context.ExceptionHandled)
return;
}
Elmah will only pickup on UNHANDLED exceptions. Under normal circumstances it won't do anything with the UI, it will leave the Yellow Screen of Death intact if one is served. However it will pickup the error and email and log as appropriate.
To use Elmah in conjunction with the HandleErrorAttribute you have to add code to fire off Elmah even though the exception was handled.
A simple example is shown below (with a CustomHandleErrorAttribute)
public
class CustomHandleErrorAttribute : HandleErrorAttribute
{
private readonly ILog log;
public CustomHandleErrorAttribute(ILog log)
{
this.log = log;
}
public override void OnException(ExceptionContext context)
{
// Give the framework a chance to handle the exception
base.OnException(context);
// If the exception was not handled then allow the exception to bubble up - Elmah will catch it
if (!context.ExceptionHandled) return;
// If the exception was handled by the framework then log it for the record
var httpContext = context.HttpContext.ApplicationInstance.Context;
var signal = ErrorSignal.FromContext(httpContext);
signal.Raise(context.Exception, httpContext);
log.Error(context.Exception);
}
}References:
http://blog.dantup.com/2009/04/aspnet-mvc-handleerror-attribute-custom.html
Wednesday, 19 September 2012
403 Access is denied due to invalid credentials, MVC3, IIS7
I had a MVC3 application that compiled and ran fine locally, but when deployed to the UAT server running IIS7, the application failed and returned a 403 Access Denied error.
After a long debugging session I determined this was due to the fact that certain MVC DLLs were not present on the target machine. One way to get round this is to explicitly add them as references to the Web project, and select Copy Local to true.
The DLLs I had to add were
System.Web.WebPages
System.Web.WebPages.Razor
Other reasons why it may return such an unhelpful error are:
the application errors in the startup routines
the directory permissions are not correct
Windows authentication is not enabled for the application in IIS7
....and others
After a long debugging session I determined this was due to the fact that certain MVC DLLs were not present on the target machine. One way to get round this is to explicitly add them as references to the Web project, and select Copy Local to true.
The DLLs I had to add were
System.Web.WebPages
System.Web.WebPages.Razor
Other reasons why it may return such an unhelpful error are:
the application errors in the startup routines
the directory permissions are not correct
Windows authentication is not enabled for the application in IIS7
....and others
Visual Studio remote debugger is version sensitive
The Visual Studio remote debugger has to be connected to the same version as the main IDE.
You cannot connect the 2010 remote debugger to VS.NET 2012, and vice-versa!
You cannot connect the 2010 remote debugger to VS.NET 2012, and vice-versa!
Thursday, 13 September 2012
Watching DVDs on the train
To rip a DVD for watching on the train:
1. Use DVD Decrypter to extract the contents of the DVD onto the file system.
2. Then use Handbrake to convert it into a watchable format.
For extracting BluRay discs, you can use MakeMKV.
1. Use DVD Decrypter to extract the contents of the DVD onto the file system.
2. Then use Handbrake to convert it into a watchable format.
For extracting BluRay discs, you can use MakeMKV.
Subscribe to:
Posts (Atom)