Search

Categories

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Send mail to the author(s) E-mail

# Thursday, April 08, 2010

The last week of looking at RoR:

  • Does all the plumbing if you follow the convention
  • Amazing how little code you need to write
  • The important stuff for CRUD apps is all there – validators, db relationships, CRUD functionality
  • The ORM works
  • Fast to develop!

In summary this look like a wonderful technology for putting together CRUD based business apps fast.

Shared hosting seems to be harder than .NET / PHP, however heroku.com is a great free resource.

Commercially speaking I think it would work very well in an enterprise where there is a need to develop apps fast (when isn’t there!) that do not require huge performance (I would argue that most apps I’ve worked on would be well suited in RoR).

Comments [0] | | # 
# Wednesday, April 07, 2010

ruby script/generate scaffold flight departure:datetime arrival:datetime destination:string baggage_allowance:decimal capacity:integer

ruby script/generate scaffold seat flight_id:integer name:string baggage:decimal

rake db:migrate

image

 

image

What we want is a form that has the flight info on it, then the ability to add a new seat booking.

Partials

Coppied seat/new.html.erb  into flight/show.html.erb file rendering as a partial

_new_seat.html.erb

Changed:

<% form_for(seat) do |f| %>
  <%= f.error_messages %>

  <p>
    <%= f.label :flight_id %><br />
    <%= f.text_field :flight_id %>
  </p>
  <p>
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </p>
  <p>
    <%= f.label :baggage %><br />
    <%= f.text_field :baggage %>
  </p>
  <p>
    <%= f.submit 'Create' %>
  </p>
<% end %>

the form_for(@seat) to (seat) to become a local variable to the partial.  This is good practise.

called the partial from flights/show.html.erb as

<%= render :partial=>"new_seat", :locals=>{:seat=>Seat.new(:flight_id=>@flight.id)}%>

<% form_for(seat) do |f| %>
  <%= f.error_messages %>
  <%= f.hidden_field :flight_id %>

image

We also need a partial for the seat list

image

however this is bad as its displaying the seats for all flights

Connect the models together

means we don’t need to use finders.. it works automatically.

class Flight < ActiveRecord::Base
  has_many :seats
end

then when rendering out the listing of seats we can pass in the array  in show.html.erb

<%= render :partial=>"seat_list", :locals=>{:seats=> @flight.seats}%>

in the model:

belongs_to :flight
    def validate
        if baggage > Flight.find(flight_id).baggage_allowance
            errors.add_to_base("You have too much baggage")
        end
        if flight.seats.size >= flight.capacity
            errors.add_to_base("The flight is fully booked")
        end
    end

image

another custom validator in the seat model

if flight.seats.size >= flight.capacity
            errors.add_to_base("The flight is fully booked")
        end

image

**TO DO put in a validator that checks there is a number for baggage

Comments [0] | | # 

ruby script/generate scaffold client_workout client_name:string trainer:string duration_mins:integer date_of_workout:date paid_amount:decimal

rake db:migrate

Problem is that the scaffolding app doesn’t do exactly what we want.

image

what we want is just the listing for Lenny Goldberg ie a filter.

Creating a Form with no Model

instead of form_for

<% form_for(@ad,:url=>{:action=>'update'}) do |f| %>
  <p><b>Name</b><br /><%= f.text_field :name %></p>
  <p><b>Description</b><br /><%= f.text_area :description %></p>
  <p><b>Price</b><br /><%= f.text_field :price %></p>
  <p><b>Seller</b><br /><%= f.text_field :seller_id %></p>
  <p><b>Email</b><br /><%= f.text_field :email %></p>
  <p><b>Img url</b><br /><%= f.text_field :img_url %></p>
  <p><%= f.submit "Update" %></p>
<% end %>

we use form_tag

<% form_tag "/client_workouts/find" do%>
      <%= text_field_tag :search_string%>
      <%= submit_tag "Search" %>
    <% end %>

 

image

image

by putting in dave into the search box, we can see it coming through in the controller by using puts to output to the console.

So we only need those records where client_name = the search string.

def find
      puts params[:search_string]
      @client_workouts = ClientWorkout.find_all_by_client_name(params[:search_string])
  end

The framework creates finders for each attribute.. eg find_all_by_client_name.

and I just wired up to a find.html.erb file.

image

however we want to search on trainer as well ie where client_name=”Lenny Goldbery” or trainer = “Lenny Goldberg”

@client_workouts = ClientWorkout.find(:all, :conditions=>["client_name = ? OR trainer = ?",
                          params[:search_string], params[:search_string]])

image

The crowd goes wild!  Can filter on client_name or trainer.

Validators

A number:

class ClientWorkout < ActiveRecord::Base
    validates_numericality_of :paid_amount
end

Mandatory:

class ClientWorkout < ActiveRecord::Base
    validates_numericality_of :paid_amount
    validates_presence_of :trainer
    validates_presence_of :client_name
end

image

 

Doing it on custom code:

class Ad < ActiveRecord::Base
  validates_presence_of :price
  validates_presence_of :name
end

def create
      @ad = Ad.new(params[:ad])
      if @ad.save
        redirect_to "/ads/#{@ad.id}"
      else
        render :template => "ads/new"
      end
  end

<% form_for(@ad,:url=>{:action=>'create'}) do |f| %>
    <%=f.error_messages%>

image

Comments [0] | | # 

here is how we do it from scaffolding:

Symbols and Strings

<%= f.label :seat_id_seq %>   This is a symbol.  They always start with a colon.  Generally used to name things.  Mostly interchangeable with strings.

<%= f.label “Seat #” %>   This is a string.

Add a column to the DB

to add the database we:

ruby script/generate scaffold ticket name:string seat_id_seq:string address:text price_paid:decimal email_address:string

to add a row:

ruby script/generate migration AddPhoneToTickets phone:string

important bit is Add…To…

then

rake db:migrate

image

then changed the 4 view to display the new field.

Starting From Scratch

The scaffolding can create too much code!  Here is an app just generating 1 page to start with (a show page)

ruby script/generate model ad name:string description:text price:decimal seller_id:integer email:string img_url:string

models have singular names eg ticket, ad

Controller

ruby script/generate controller ads

controllers have plural names

Routes

map.connect '/ads/:id', :controller=>'ads', :action=>'show'

use the ads_controller.rb, and the show template.

View

show.html.erb

<p>
    <b>Name:</b><%= @ad.name %>
</p>

image

Index Page

controller:

  def index
    @ads = Ad.find(:all)
  end

index.html.erb

<% for ad in @ads%>
    <li><a href="/ads/<%= ad.id%>"><%=ad.name%></a></li>
<% end %>

route

map.connect 'ads/', :controller=>'ads', :action=>'index'

image

Layouts

images into public/images

stylesheet into public/stylesheets

apps/views/layouts/ads.html.erb

image

Post New Ads Online

routes

map.connect 'ads/new', :controller=>'ads', :action=>'new'
map.connect 'ads/create', :controller=>'ads', :action=>'create'

viewff

 

ads/new.html.erb

and the form will be submitted to:

ads/create

 

RoR Text Editor

Am trying http://www.e-texteditor.com/

ctrl shift p – toggle between project view and editor view

http://www.e-texteditor.com/wiki/index.php/Projects#Keyboard_navigation – keyboard shortcuts

Create Form Helper

Rails can create forms that are associated with model objects. so in new.html.erb

<% form_for(@ad,:url=>{:action=>'create'}) do |f| %>
  <p><b>Name</b><br /><%= f.text_field :name %></p>
  <p><b>Description</b><br /><%= f.text_area :description %></p>
  <p><b>Price</b><br /><%= f.text_field :price %></p>
  <p><b>Seller</b><br /><%= f.text_field :seller_id %></p>
  <p><b>Email</b><br /><%= f.text_field :email %></p>
  <p><b>Img url</b><br /><%= f.text_field :img_url %></p>
  <p><%= f.submit "Create" %></p>
<% end %>

eg this comes out as:

<b>Name</b><br /><input id="ad_name" name="ad[name]" size="30" type="text" />
image 

so when the submit button is pressed, this routes back to the create action in the AdsController.

Controller

def new
      @ad = Ad.new   
  end


  def create
      @ad = Ad.new(params[:ad])
      @ad.save
      redirect_to "/ads/#{@ad.id}"
  end

note:  create an empty ad object before passing onto new

and we have an automatic redirect to the listing

otherwise could have commented out and it would go automatically to create.html.erb:

image

Edit a Record

routes add in

map.connect 'ads/:id/edit', :controller=>'ads', :action=>'edit'
map.connect 'ads/:id/update', :controller=>'ads', :action=>'update'

controller add in

def edit
      @ad = Ad.find(params[:id])
  end
  def update
      @ad = Ad.find(params[:id])
      @ad.update_attributes(params[:ad])
      redirect_to"/ads/#{@ad.id}"
  end

view add in

<% form_for(@ad,:url=>{:action=>'update'}) do |f| %>
  <p><b>Name</b><br /><%= f.text_field :name %></p>
  <p><b>Description</b><br /><%= f.text_area :description %></p>
  <p><b>Price</b><br /><%= f.text_field :price %></p>
  <p><b>Seller</b><br /><%= f.text_field :seller_id %></p>
  <p><b>Email</b><br /><%= f.text_field :email %></p>
  <p><b>Img url</b><br /><%= f.text_field :img_url %></p>
  <p><%= f.submit "Update" %></p>
<% end %>

Security

in the AdsController

before_filter :check_logged_in, :only => [:edit, :update]

  private
    def check_logged_in
        authenticate_or_request_with_http_basic("Ads") do |username, password|
            username == "admin" && password == "secret"
        end
    end

image

 

Delete

image

Just calling a single action on the controller called destory which then redirects back to index.

 

**TODO put this live

Comments [0] | | # 
# Thursday, April 01, 2010

elevator

use cases

paper prototype:

put mock up live

http://pubtricks.heroku.com/

image

changes to scaffold:

background colour in all games in \views\layouts\games.html.erb

Comments [0] | | # 

 

heroku - free
dreamhost - 9us per month
railsplayground - 5us per month
slicehost - vps.. bout 20 per month

gem install heroku

image

create git repo

heroku create

  it then added ssh key to remote

git remote – has added in the remote

git push heroku master

image

hmmm…

tried:  heroku keys:add c:\id_rsa.pub

remembered i’d put my key in

c:\home\.ssh\id_rsa.pub

heroku rake db:migrate

image

The crowd goes wild!

Comments [0] | | # 
# Friday, March 26, 2010

After an awesome mountainbike ride I’ve managed to break my collar bone.  I wouldn’t recommend this :-)

So I though I’d make the most of the ‘opportunity’ and have a look at RoR..

image

Goal:  To deploy an application live

Downloading RoR

rubyonrail.org – download.  Getting 1.8.7 of Ruby.. tick add to executable, and associate .rb

rubygems – package manager..extract, run setup.rb

gem install rails 2.3.5

rails --version

http://docs.heroku.com/windows – good install screencast

Hello World App

rails blog

cd blog

ruby script/server

localhost:3000

uses WEBrick 1.3.1

am getting strange error:

image

Install SQLite3

http://akitaonrails.com/2009/01/13/the-best-environment-for-rails-on-windows

http://www.sqlite.org/download.html

sqlite3.exe into \windows

sqlite3.dll into system32

 

http://allaboutruby.wordpress.com/2009/07/20/installing-rails-on-windows-3-years-later/

gem install sqlite3-ruby

cd \code\ruby\hello

ruby script\server

the crowd goes wild!!!

image

ruby script/generate scaffold post title:string description:text

This command creates a Post scaffold, a model/controller/view ready to be updated.  The post model will have 2 fields – a title which is a single line of text and a description, which is multi-line text.

image

Run the database migration. This is because after creating the scaffold, the database is not automatically updated with the new blog model, you need to do it manually by running a rake db:migrate command

image

cool – now have db integration and working scaffold

http://railsforum.com/

http://railscasts.com/episodes/archive

http://allaboutruby.wordpress.com/2009/08/08/5-minute-project-in-rails/ – very simple app.

http://ruby-toolbox.com/categories/rails_form_builders.html

 

http://guides.rubyonrails.org/getting_started.html#installing-rails

in c:\code

rails blog   - this creates a rails app that uses sqllite.

 

The Blog from Guide

http://guides.rubyonrails.org/getting_started.html

rails blog

rake db:create

rake –T  shows all rake (general purpose command runner) commands

ruby script/generate controller home index  -creates files including app/views/home/index.html.erb. This is the template that will be used to display the results of the:

 index action (method) in the home controller.

image

edit index.html.erb to <H1>Hello Rails</H1>

ruby script\server

http://locahost:3000/home/index

image

Change home page

config\routes.rb

map.root :controller => "home"

Scaffolding

Rails scaffolding is a quick way to generate some of the major pieces of an application. If you want to create the models, views, and controllers for a new resource in a single operation, scaffolding is the tool for the job.

ruby script/generate scaffold Post name:string title:string content:text

This creates a model, a db migration ruby file, views and changes the config\route.rb file.

rake db:migrate

put in:  <%= link_to "My Blog", posts_path %>

image

then

image

image

 

Validation

The model file, app/models/post.rb is about as simple as it can get:

validates_presence_of :name, :title

validates_length_of :title, :minimum => 5

image 

View

<% @posts.each do |post| %>
  <tr>
    <td><%=h post.name %></td>
    <td><%=h post.title %></td>
    <td><%=h post.content %></td>
    <td><%= link_to 'Show', post %></td>
    <td><%= link_to 'Edit', edit_post_path(post) %></td>
    <td><%= link_to 'Destroy', post, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>

h is a rails helper

lik_to buils hyperlinks

edit_post_path

new_post_path

Layout

These are containers for views

app\views\layouts\posts.html.erb

<body style="background: #EEEEEE;">

now all views for posts have a grey background

Entering Data and Wiring Up

<% form_for(@post) do |f| %>
  <%= f.error_messages %>

form_for block is used to create an html form..

<%= f.label :name %><br />

<%= f.text_field :name %>

wires up a text box with name attribute

DRYing up Code - Partials

scaffold generated views for new and edit are largely identical.. so can use partials template.

_form.html.erb  underscore is convention for partial

<% form_for(@post) do |f| %>
  <%= f.error_messages %>

  <p>
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </p>
  <p>
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </p>
  <p>
    <%= f.label :content %><br />
    <%= f.text_area :content %>
  </p>
  <p>
    <%= f.submit 'Save' %>
  </p>
<% end %>

and in new.html.erb

<h1>New post</h1>

<%= render :partial => "form"  %>

<%= link_to 'Back', posts_path %>

****7.2 Using Filters to eliminate controller duplication

 http://wiki.devchix.com/index.php?title=Server_2003

The Blog App Video

From front page of rails site:

http://www.opensourcerails.com/

http://www.softwaredeveloper.com/features/best-ruby-on-rails-061307/

http://www.3months.com/technology

http://blog.obiefernandez.com/content/

 

Auth

http://wiki.rubyonrails.org/howtos/authentication-authorization

Authentication is what you do when you let a user identify itself. This is needed when you want to offer a login access to your application.

Authorization is what you do when you check the credentials of a user before letting him/her interact with specific sections of your system. This is needed when you have restricted areas/actions.

Comments [0] | | # 
# Tuesday, February 23, 2010

This is useful to get checking on the aspx page at compile time. 

Right click on the project, and select unload.

Edit the .csproj file

image

Set MvcBuildViews to true

Save, reload, compile.

Comments [0] | | # 
# Monday, February 22, 2010

The Hands on MVC set of videos:  www.learnvisualstudio.net

Routing

In global.asax

 routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new {controller = "Home", action = "Index", id = ""} // Parameter defaults
);

This means eg http://localhost:3203/Home/About
will come to the controller called HomeController and run the method called About
 
public ActionResult About()
{
return View();
}

which in this case will call the view with the same name called About.aspx

What about http://localhost:3203/ which is the same as /Home and /Home/Index

In this case the defaults are being used eg Home, Index , null… as shown above in //Parameter defaults.

It even passes a message from the Home controller, Index method.

ViewData["Message"] = "Welcome to ASP.NET MVC!";
 
Hardcode /Home to mean something
// for hardcoded /home goto home/member
routes.MapRoute(
"MemberHome",
"home",
new {controller = "Home", action = "Member"}
);

Building UI Form

get is putting in query string

post is putting in the http request body

utility methods for not directly specifying URL


<%Html.BeginForm(); %>






<% Html.EndForm(); %>

Useful to see the Request coming back from /home/member into the HomeController, Member method.

image

asdf

image

Yuk!

Post redirect get pattern.

Basically stops the above resend message by getting the browser to do a redirect after the post page, to a nice get page.

[Authorize]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Member(string status) // this will match up the name status in the forms collection
{
//return View();
return RedirectToAction("Member");
}

The Model using LinqToSQL

Added a simple table with a FK to the aspnet_users UserId column.

 

image


The UserId FK is a guid.

The Timestamp has a default value of GETUTCDATE() so that the db writes in the timestamp.

LinqToSQL has:

readonly – shouldn’t allow app to change it

auto Generated Value = true   - hmm to do with:

Auto_Sync – so it will auto get the timestamp property back into the model whenever it does an insert.

 

Can see the class generated that represents our StatusUpdate table:

image

The View

In the controller:

List updates = db.GetUserUpdates(User.Identity.Name);
return View(updates);

and in the view:

System.Web.Mvc.ViewPage>

we now get a strongly typed object

 

View Models

Have simply created another class called MemberViewModel in Models:

public class MemberViewModel
{
public List Updates { get; set; }
}
 
so can pass in more complex stuff than just a list into my view (can’t pass in multiple lists)
 
So the view now has:
 
System.Web.Mvc.ViewPage

and we can access data like:
 
foreach (var update in Model.Updates)

 

Lazy Loading and Eager Loading.

However we’ve hit an interesting issue:

image

this is because of in the view we’ve called:

Html.Encode(update.User.UserName)

And in the actual query, it returns only the StatusUpdate object and not the User object (even though it does a join).

var updates = from update in this.StatusUpdates
where update.User.UserName == userName
orderby update.Timestamp descending
select update;
 
in the controller after query is ran and the result put into the ViewModel, then passed to the View… the datacontext is destroyed.
 
using (var db = new TwixDataContext())
{
ViewData["Stuff"] = "Blah this is a generic object with no intellisense";

MemberViewModel model = new MemberViewModel
{
Updates = db.GetUserUpdates(User.Identity.Name)
};
//List updates = db.GetUserUpdates(User.Identity.Name);
return View(model);
}


So when the view tries to call the User.UserName.. LinqToSQL tries to go and get this data, as it hasn’t been needed yet.  This is lazy loading.

We want LinqToSQL to load the User object at the same time as loading the StatusUpdates.. this is Eager Loading.

CSS

Making things look good:

#timeline { list-style: none; padding: 0;}
#timeline li {border-top:dashed 1px #888; padding: 5px 0; }
#timeline li:hover { background-color: #eee; }
#timeline li div.message { font-size: 10pt; }
#timeline li div.message span { font-weight: bold; }
#timeline li div.time { font-size: 8pt; font-style: italic }

for:

    "timeline">
    <%foreach (var update in Model.Updates) {%>


  • class="message">
    <%= Html.Encode(update.User.UserName) %>:
    <%=Html.Encode(update.Message) %>

    class="time">
    <%=update.Timestamp.ToLocalTime().ToString() %>


  • <%} %>
Creating a Home/Profile

coppied the get from index, however instead of passing in the current logged in user to GetUserUpdates, am passing in the string ie it will be localhost/nameofperson or localhost/home/profile/nameofperson

Also created a new viewmodel for profile that has username in it (as we’ll need this).  Strongly typed as well.

public class ProfileViewModel
{
public string UserName { get; set; }
public List Updates { get; set; }
}

Partial View (#7)

create a viewmodel just for the timeline ie this partial view.

changing MemberViewModel and ProfileViewModel to have a TimeliveViewModel (abstracting it away to get rid of duplication)

public class MemberViewModel
{
public TimelineViewModel TimelineModel { get; set; }
}

public class TimelineViewModel
{
public List Updates { get; set; }

So we reference it in the controller like this:

ProfileViewModel model = new ProfileViewModel
{
UserName = userName,
TimelineModel = new TimelineViewModel{
Updates = db.GetUserUpdates(userName)
}
};
and then in the view:
<%foreach (var update in Model.TimelineModel.Updates) {%>

Hyperlinks, Anonymous Type - create new view as Timeline.ascx

<%Html.RenderPartial("Timeline", Model.TimelineModel); %>
 
<%Html.ActionLink(update.User.UserName, "profile", new {userName = update.User.UserName}) %>

First property is the text to be displayed, second is the action to be called when they click this link (method on this controller),

We’re not specifying the controller here, so it is going to user the current (home) controller.

The third is a generic object which represents the extra route values that we want.. as the method takes a parameter called userName, we need to pass it. We use an anonymous type

 

image

The crowd goes wild :-)

Seeing Other Peoples Tweets

A common technique when we need a Many to Many relationship. 

each user can follow many other users

each user can be followed by many other users

image

The primary key is both on the FollowerMappings table.

Then in the Mappings:

image

We have renamed the child and parent properties for clarity.

The first FK relationship is the FollowerId being held constant.  So the Child Property is the Followee (all the people the user is following)

The second FK relationship is the FoloweeId being held contact.  So the Child Property is the Follower (all people who are following the user).

**TODO refactor and come up with better names.

Adding Methods to The Model DataContext

GetAllUpdates – gets all status update records including those psoted by user that this user is following

IsFollowing – checks if a specific user name is following another user name… so we know whether to display a button

DeleteFollowerMapping

Adding Methods to the HomeController

Changed the get method on Home/Profile to GetUserUpdates.. and to do logic for displaying the Follow/Stop Following button.

Added a post method for Follow (which is called from Profile as a form post), and redirects back to Profile.

 

[Authorize]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Follow(string userName)
{
if (!string.IsNullOrEmpty(userName) && !userName.Equals(User.Identity.Name, StringComparison.OrdinalIgnoreCase))
{
using (var db = new TwixDataContext())
{
if (!db.IsFollowing(User.Identity.Name, userName)) // double check they are not already being followed
{
var followerMapping = new FollowerMapping
{
FollowerId = db.GetUserIdForUserName(User.Identity.Name),
FolloweeId = db.GetUserIdForUserName(userName)
};

db.FollowerMappings.InsertOnSubmit(followerMapping);
db.SubmitChanges();
}
}
}
return RedirectToAction("Profile", new {userName = userName});
}

Added a post method for StopFollowing.. same as above.

Adding Properties to the ProfileViewModel

public class ProfileViewModel
{
public string FollowText { get; set; }
public string FollowAction { get; set; }
public bool IsSelf { get; set; }
public string UserName { get; set; }
public TimelineViewModel TimelineModel { get; set; }
}
So when we pass this object to the view, we’ve got lots of strongly typed goodness.

Using in the View

using (Html.BeginForm(Model.FollowAction, "home")) {
%>
<%=Html.Hidden("userName", Model.UserName) %>

<%
}

where the brace ends, is just the same as doing an Html.EndForm.

 

Best Practise

Use a form post instead of a link if doing database stuff to prevent hacking.

Summary so Far

Why do we have so much business logic in the controller?

DSCN1403

next video is #9

why is this line sometimes giving Http Exception in home controller.

var isSelf = userName.Equals(User.Identity.Name, StringComparison.OrdinalIgnoreCase);

#9 – is jQuery.. thats all folks or more stuff.

#10 – is account settings.. name, email, timezone.. form field validation… combo box (dropdown)… nice fade out jquery front end.

#11 – is upload photo

#12 – is search.. ?q=learnvisualstudio… not a post… stuff in his source code that isn’t in video. icon/link delete a post.

Comments [0] | | # 
# Friday, February 19, 2010

Pairing with Michael, we did our first spike from here:

http://ericdotnet.wordpress.com/2009/04/09/jquery-search-box-and-aspnet-mvc/

worked fine locally, but then going live getting some issues.  Looked like it was mateerit.co.nz/search

<script src=" <%=Url.Content("~/Scripts/jquery-1.3.2.js") %>" type="text/javascript"></script>

The above seemed to work, however the javascript seemed harder:

<script type="text/javascript">

$(document).ready(function() {
$("#searchTerm").autocomplete("/Home/getAjaxResult/");
});

</script>

so I cheated and went onto a subdomain:  jsearch.mateerit.co.nz

All works now with firebug too.

image

Comments [0] | | #