Solved

Display Default Content If No QueryString Provided

Posted on 2009-05-13
11
559 Views
Last Modified: 2012-06-22
Hi,
I have a query that takes data (articles) from a database and displays them on the page. If someone visits Page.aspx?id=1 they will see article 1. My problem is I want to display some default content such as a list of articles on Page.aspx or, if someone just manually removes the query string from the URL. I used to do this all the time in PHP/MySQL but don't know how to do it in ASP.NET C#. The code provided shows where I am up to. I did this with the "Configure Data Source".

Thanks,
Keith
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 

            DataSourceID="SqlDataSource1">

            <Columns>

                <asp:BoundField DataField="C_ID" HeaderText="C_ID" SortExpression="C_ID" />

                <asp:BoundField DataField="C_Name" HeaderText="C_Name" 

                    SortExpression="C_Name" />

                <asp:BoundField DataField="C_Title" HeaderText="C_Title" 

                    SortExpression="C_Title" />

                <asp:BoundField DataField="C_Category" HeaderText="C_Category" 

                    SortExpression="C_Category" />

                <asp:BoundField DataField="C_Author" HeaderText="C_Author" 

                    SortExpression="C_Author" />

                <asp:BoundField DataField="C_Content" HeaderText="C_Content" 

                    SortExpression="C_Content" />

            </Columns>

        </asp:GridView>

        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 

            ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 

            SelectCommand="SELECT [C_ID], [C_Name], [C_Title], [C_Category], [C_Author], [C_Content] FROM [SJCS_Content] WHERE ([C_Name] = @C_Name)">

            <SelectParameters>

                <asp:QueryStringParameter Name="C_Name" QueryStringField="id" Type="String" />

            </SelectParameters>

        </asp:SqlDataSource>

        <br />

Open in new window

0
Comment
Question by:nedlogan
  • 5
  • 4
  • 2
11 Comments
 
LVL 12

Assisted Solution

by:GuitarRich
GuitarRich earned 60 total points
Comment Utility
in your page load you could check for the existance of the querystring parameter and redirect to another page if its not there:
 

if (Request.QueryString["id"] == null)

{

    Response.Redirect("anotherpage.aspx");

}

Open in new window

0
 
LVL 11

Expert Comment

by:Muhammad Ousama Ghazali
Comment Utility
Try the code provided in snipped box below in your code behind file. Make sure to make appropriate changes as per your situation.
'Define this on class/page level

Private m_intArticleId As Integer

Private m_strName As String
 

'Write below code in Page_Load event

If Request.QueryString("id") IsNot Nothing Then
 

  'For Integer Values

	If Integer.TryParse(Request.QueryString("id"), m_intArticleId) Then

    SqlDataSource1.SelectParameters.Add("ArticleId", TypeCode.Int32, m_intArticleId)

    

  Else

    'Send some default value here such as 0

    SqlDataSource1.SelectParameters.Add("ArticleId", TypeCode.Int32, 0)
 

    'Alternatively hide the grid and display default content on page directly

    'GridView1.Visible = False

    'Show some default text on some Label, etc. or unhide a pre

  

	End If

  

  'For String Values

	If Request.QueryString("id").Length > 0 Then

    SqlDataSource1.SelectParameters.Add("ArticleId", TypeCode.Int32, m_intArticleId)

    

  Else

    'Send some default value here such as 0

    SqlDataSource1.SelectParameters.Add("ArticleId", TypeCode.Int32, 0)
 

    'Alternatively hide the grid and display default content on page directly

    'GridView1.Visible = False

    'Show some default text on some Label, etc. or unhide a pre

  

	End If
 

End If

Open in new window

0
 
LVL 11

Expert Comment

by:Muhammad Ousama Ghazali
Comment Utility
The String part in the above posted code has been wrongly posted, Use this one instead.
  'For String Values

	If Request.QueryString("name").Length > 0 Then

    SqlDataSource1.SelectParameters.Add("ArticleId", TypeCode.String, Request.QueryString("name"))

    

  Else

    'Send some default value here

    SqlDataSource1.SelectParameters.Add("ArticleId", TypeCode.Int32, "SomeDefaultName")
 

    'Alternatively hide the grid and display default content on page directly

    'GridView1.Visible = False

    'Show some default text on some Label, etc. or unhide a pre

  

	End If

Open in new window

0
 
LVL 2

Author Comment

by:nedlogan
Comment Utility
Thanks so far. Moghazali I need any code in C# yours looks like VB?

Keith
0
 
LVL 11

Expert Comment

by:Muhammad Ousama Ghazali
Comment Utility
Find herewith the code in C#. I mostly use this converter to get the most good inter-convertion of VB and C#: http://www.developerfusion.com/tools/convert/vb-to-csharp/

//Define this on class or page level

private int m_intArticleId;

private string m_strName;
 

//Write below code in Page_Load event

if (Request.QueryString("id") != null) {

    

  //For Integer Values

  if (int.TryParse(Request.QueryString("id"), m_intArticleId)) {

      SqlDataSource1.SelectParameters.Add("ArticleId", TypeCode.Int32, m_intArticleId);

  }

  else {

      

      //Send some default value here such as 0

      SqlDataSource1.SelectParameters.Add("ArticleId", TypeCode.Int32, 0);

  }

  

  //Alternatively hide the grid and display default content on page directly

  //GridView1.Visible = False

  //Show some default text on some Label, etc. or unhide a pre

  

  

  //For String Values

  if (Request.QueryString("name").Length > 0) {

      SqlDataSource1.SelectParameters.Add("C_Name", TypeCode.String, Request.QueryString("name"));

  }

  else {

      

      //Send some default value here

      SqlDataSource1.SelectParameters.Add("C_Name", TypeCode.Int32, "SomeDefaultName");

  }

  

  //Alternatively hide the grid and display default content on page directly

  //GridView1.Visible = False

  //Show some default text on some Label, etc. or unhide a pre

  

}

Open in new window

0
Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 11

Expert Comment

by:Muhammad Ousama Ghazali
Comment Utility
Change Line 30 of above code to:

      SqlDataSource1.SelectParameters.Add("C_Name", TypeCode.String, "SomeDefaultName");

Open in new window

0
 
LVL 2

Author Comment

by:nedlogan
Comment Utility
Hi Moghazali,
I'm getting errors from line 9 in your code. The first error is: "The best overloaded method match for 'int.TryParse(string, out int)' has some invalid arguments"?

Thanks,
Keith
0
 
LVL 11

Accepted Solution

by:
Muhammad Ousama Ghazali earned 65 total points
Comment Utility
Please try using Int32.TryParse() instead of int.
0
 
LVL 2

Author Comment

by:nedlogan
Comment Utility
Moghazali,
The error now is: "The name 'int32' does not exist in the current context."

Keith
0
 
LVL 12

Expert Comment

by:GuitarRich
Comment Utility
don't need to use int32 change it to
if (int.TryParse(Request.QueryString("id").ToString(), out m_intArticleId)) {
0
 
LVL 2

Author Closing Comment

by:nedlogan
Comment Utility
Hi,
Thanks for your help guys, in the end I used the first solution that GuitarRich posted.
Moghazali, I couldn't get your code to work but thanks anyway for the work you did.
Keith
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
International Data Corporation (IDC) prognosticates that before the current the year gets over disbursing on IT framework products to be sent in cloud environs will be $37.1B.
Illustrator's Shape Builder tool will let you combine shapes visually and interactively. This video shows the Mac version, but the tool works the same way in Windows. To follow along with this video, you can draw your own shapes or download the file…
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now