Tuesday, August 16, 2011

How to use a collection in MVC which will populate the ViewModel correctly


The view model below is a collection of strings called Images


public class PostItemViewModel
{
   public PostItemViewModel()
   {
      Images = new List<string>();
   }

   public List<string> Images { get; set; }
}


The View would look something like the code below.  The reason for the HiddenFor, is so that when  you post back to your controller, the view model that is posted back will contain the Image list.


<table>
   <tr>
   <%
   for (int i = 0; i < Model.Images.Count; i++)
   {
   %>
      <td>
         <%= Html.HiddenFor(m => m.Images[i]) %>
         <img alt="<%= Model.Images[i] %>" width="50" src="\Uploads\<%= Model.Images[i] %>" />
      </td>
   </tr>
</table>

Tuesday, April 12, 2011

How to show differences in two files using tortoise SVN

Right click on the file > Tortoise SVN > Show log

Click on the first version of the file

[Ctrl] Click on the second file

Right click > Compare Revisions

Thursday, March 17, 2011

How to use multiple login pages in MVC

When you only have one login page, then it's easy to add the authorize attribute to your action and you'll automatically be directed to the login page in your web.config


[Authorize(Roles = "Administrator")]
public ActionResult EditCategory(int id)
{
   return View();
}
On my sites, I have a separate login page for the Administrative area, so I needed to create a custom attribute.

[CustomAuthorization(LoginPage = "~/Admin/LogOn", Role = "Administrator")]
public ActionResult EditCategory(int id)
{
   return View();
}
/// <summary>
/// Allows you to specify the Login Page and Role with an attribute:  [CustomAuthorization(LoginPage="~/Admin/LogOn",Role="Administrator")]
/// </summary>
/// <param name="filterContext"></param>
public class CustomAuthorization : AuthorizeAttribute
{
   public string LoginPage { getset; }
   public string Role { getset; }
 
   public override void OnAuthorization(AuthorizationContext filterContext)
   {
      //Send the return url to the login page
      LoginPage += "?ReturnUrl=" + filterContext.HttpContext.Request.RawUrl;
      if (!filterContext.HttpContext.User.Identity.IsAuthenticated)       {          filterContext.HttpContext.Response.Redirect(LoginPage);       }       else       {          if (Role != null)          {             if(!filterContext.HttpContext.User.IsInRole(Role))                filterContext.HttpContext.Response.Redirect(LoginPage);          }       }       base.OnAuthorization(filterContext);    } }

Wednesday, March 9, 2011

How to calculate age in Excel

This formula will calculate a person's age in excel (assuming date of birth is in cell A1)


=IF(MONTH(TODAY())>MONTH(A1),YEAR(TODAY())-YEAR(A1),
 IF(AND(MONTH(TODAY())=MONTH(A1),DAY(TODAY())>=DAY(A1)),
 YEAR(TODAY())-YEAR(A1),(YEAR(TODAY())-YEAR(A1))-1))

Thursday, February 24, 2011

How to change the title of a jquery dialog

Here is an image that a user can click to get help

   <img src="/Content/images/Help.png" style="cursor:pointer" onclick="javascript:ShowHelp('My Title')" />

Here is the jquery dialog

   <div id="dialog-help" title="" style="background:white">
      <div id="divHelpContents"></div>
   </div>

Javascript function to set up the dialog

      $(document).ready(function ()
      {
         //Help popup
         $("#dialog-help").dialog({ autoOpen: false
            , modal: true
            , width: 415
            , height: 300
            , show: "blind" //animation effect
            , hide: "clip" //animation effect            
            , draggable: true
            , resizable: false
            , buttons: {
               Ok: function ()
               {
                  $(this).dialog("close");
               }
            }
         });
      });
Here is a function that will update the title, help contents, and open the dialog
      function ShowHelp(topic)
      {
            $("#dialog-help").dialog('option', 'title', topic);
            $("#divHelpContents").html("Show some help contents here");
            $("#dialog-help").dialog("open");
      }

Friday, February 18, 2011

How to get paste to work with Remote Desktop Connection

You can copy things to the clipboard and paste them into your remote desktop connection.

What do you do when paste stops working ?

1.  Close your remote desktop connection (you don't need to log out).

2.  Reconnect.

How to re-insert deleted records when there is an identity field

My customers like to delete important records and then have me restore them from a backup when they realize their mistake.

When the column has an identity field, and you want to restore the records with the same number as they had before deleted, you must turn on identity insert with this TSql command

SET IDENTITY_INSERT {YourTableName} ON 

insert the deleted records

SET IDENTITY_INSERT {YourTableName} OFF 

Friday, January 28, 2011

How to detect if an element is hidden in jQuery

This will work when myID was hidden using .hide( ) and displayed using .show( )


if($("#myID").is(":visible"))
   $("#myID").hide();
else
   $("#myID").show();

How to get rid of Unexpected error 0x8ffe2740 occurred in IIS 5

Running XP, I stopped my Default website and rebooted my computer.

Then when I tried to restart my website, I was getting the error "Unexpected error 0x8ffe2740 occurred".

This was because Skype started before IIS.

To resolve, quite Skype, restart IIS, start your site, then restart Skype

Thursday, January 27, 2011

How to refresh Intellisense in SQL Server 2008

Intellisense in SQL Server 2008 Management Studio is a great feature. When adding a table, column etc, your Intellisense doesn't know about the change right away.

To fix this

Edit > Intellisense > Refresh Local Cache

Thursday, January 20, 2011

How to find the value of a dropdown in a user control using jQuery

you may have an asp:Dropdown control with an id="ddViewBy" like below.

<asp:DropDownList class="ddList" runat="server" ID="ddViewBy" AutoPostBack="true" OnSelectedIndexChanged="ddViewBy_Changed"><asp:DropDownList>

If your dropdownlist is in a user control and the usercontrol is in a content place holder, then when you view source, on the web page the id of the control would change to something like this:

id="ctl00_phContent_ucSearchFilter_ddViewBy"

To find the value of the dropdown using jQuery, use the following selector

$('select[id$=ddViewBy]').val();

This is reliable, because your user control could be in different place holders which would cause the first part of the id to be different. The controls id will always end with your original name.

The $= means "ends with"

Just an FYI, ^= means "begins with"


Wednesday, January 19, 2011

How to create the ASP.Net membership tables

Sometimes web hosts (such as godaddy) will set up the aspnet membership tables for you in your database as part of the setup.

When you need to set them up locally, use the following .Net framework command
//For servername you can use "(local)" if the database is a local SQL Server install
System.Web.Management.SqlServices.Install(txtServer.Text, txtUserName.Text, txtPassword.Text, txtDatabase.Text, SqlFeatures.All);