UPDATE The issue was a syntax issue. @awrigley shows the correct way to write this in Razor.
The following works:
@if(Model.Thing.Prop != null)
{
    Html.RenderPartial("SomePartialView", Model.Thing.Prop);
}
You have a requirement to show details for the top 1 Foo for a given Bar as an HTML table. How do you hide the empty table or show a "none found" message if that Foo is null?
For example. I'm getting a NullReferenceException on the following line because Model.Thing.Prop is null;
@{Html.RenderPartial("SomePartialView", Model.Thing.Prop);} 
It is intentionally null, my Repository returns null instead of a empty Foo. But this is mildly beside the point, which is that given a null Model.Thing.Prop, I don't want to call the Html.RenderPartial.
Update
I've tried the following with no luck:
@if(Model.Thing.Prop != null)
{
    @{Html.RenderPartial("SomePartialView", Model.Thing.Prop);}
}
Which results in Visual Studio telling me it's expecting a ; at line 1, column 1 and also that ; is an Invalid expression at line 1, column 1 (I'm guessing this is due to the pre-release status of MVC3), and if I hit the page in a browser I get
CS1501: No overload for method 'Write' takes 0 arguments
with the @Html.RenderPartial line highlighted.
I also tried
@if(Model.Thing.Prop != null)
{
    <text>
    @{Html.RenderPartial("SomePartialView", Model.Thing.Prop);}
    </text>
}
but this results in a NullReferenceException from within my Partial View, which doesn't seem right. Model.Thing is definitely a valid Bar and Model.Thing.Prop is definitely a null Foo.
I presume you don't want to use...
@if (Model.Thing.Prop != null)
{Html.RenderPartial("SomePartialView", Model.Thing.Prop);} 
...because you still want to render part of the partial view?
Oh, no. Have read your post properly.
I have no idea why the above code doesn't work for you.
Remember that in Razor, @ can be used two ways:
To execute statements:
@{ MyStatement; }
To evaluate an HtmlHelper, a class method, property or variable that returns a string of some form or other (eg, HtmlString, MvcHtmlString or string). For example:
@MyClass.MyStringProperty
Note that in case 2, no terminating semi colon is required.
1 and 2 indicate that if you have an htmlhelper that returns something other than a string (eg, void), then you have to call it as follows:
@{Html.MyHelperThatReturnsVoid;}
Whereas with an HtmlHelper that returns a string or HtmlString or MvcHtmlString, you can simply write:
@Html.MyHelperThatReturnsAString
For more detail, see the accepted answer to a question I asked:
Custom HtmlHelper that returns void problem
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With