views:

20

answers:

1

Normally I work in ASP Classic, and am still a bit green on ASP.Net MVC.

I have my model with its fields or entities (might not be the right word hence why not able to find if previously answered, forgive me), and some of these will have null values such as hyperlinks, email address, specific types of phone numbers, etc.

What I want to do is not write certain blocks of HTML within the foreach loop if a field is empty.

In ASP Classic, I would have written an If statement along the lines of:

<% If RS.field <> NULL then %>HTML with <%=RS.field %><% End If %>
<% If RS.field2 <> NULL then %>HTML with <%=RS.field2 %><% End If %>
...

However, I don't know how to achieve the same result in ASP.Net MVC.

In one of my current usages, a list of sellers returned for a specific set of search results, it runs through a foreach loop and returns the current HTML (in part):

Website: <a class="url" href="<%= seller.ContactWebsite %>" target="_blank" title="Visit the website for  <%= seller.Name %>"><%= seller.ContactWebsite %></a><br />

So, if for example I have a field from the model, say seller.ContactWebsite, and this field was NULL, I would not want it to write this as part of the foreach loop.

All answers and assistance appreciated.

+2  A: 

If you are using the WebForms view engine with C# here's how your code might look like:

<% if (!string.IsNullOrEmpty(Model.field1)) { %>
    HTML with <%= Model.field1 %>
<% } %>

This assumes that your view is strongly typed to a model class and that the controller action provided to the view an instance of this model.

As you can see this syntax turns quickly into a tag soup as mixing markup with server side code is ugly. To solve this you could write a custom HTML helper method that will be responsible for properly formatting.

Let's take for example this snippet:

<a class="url" href="<%= seller.ContactWebsite %>" target="_blank" title="Visit the website for  <%= seller.Name %>"><%= seller.ContactWebsite %></a>

Here's how a potential helper method might look like:

public static MvcHtmlString MyCustomLink(this HtmlHelper htmlHelper, SellerViewModel seller)
{
    if (seller == null)
    {
        return MvcHtmlString.Empty;
    }
    var anchor = new TagBuilder("a");
    anchor.AddCssClass("url");
    anchor.MergeAttribute("href", seller.ContactWebsite);
    anchor.MergeAttribute("target", "_blank");
    anchor.MergeAttribute("title", "Visit the website for " + seller.Name);
    anchor.SetInnerText(seller.ContactWebsite);
    return MvcHtmlString.Create(anchor.ToString());
}

which could be used like this in the for loop:

<%= Html.MyCustomLink(seller) %>
Darin Dimitrov
Thanks Darin, makes perfect sense - will be trying this out first thing tomorrow and let you know the results (and with an accepted answer too)
thewinchester
Worked perfectly, and will explore the helper methods much further as well because that will help make life much easier in future.
thewinchester