I’m getting an exception when using html helpers in mvc3. I got the exception originally when using LabelFor and TextAreaFor with a ‘virtual’ parameter of a class. When I removed the virtual keyword it worked fine.
I’ve now come to add a LabelFor and an RadioBoxForEnum (Custom helper) and these use an enum (which isn’t virtual) and I’m getting the exception again.
Not sure whether it makes any difference but I’ve put this into a Telerik Tab.
The exception is:
CS1593: Delegate 'System.Action' does not take 1 arguments
Here’s the code:
items.Add().Text("Categorisation").Content(@<text>
<div class="TabContent">
<div class="5050SplitLeft">
@Html.LabelFor(o => o.ChangeProposalHeader.ChangeProposal.ProgrammeCategory, "Programme:")
@Html.TextAreaFor(o => o.ChangeProposalHeader.ChangeProposal.ProgrammeCategory
<br />
@Html.LabelFor(o => o.ChangeProposalHeader.ChangeProposal.InterfaceCategory, "Interface:")
@Html.TextAreaFor(o => o.ChangeProposalHeader.ChangeProposal.InterfaceCategory)
<br />
@Html.LabelFor(o => o.ChangeProposalHeader.ChangeProposal.TechnicalReadinessCategory, "Technical Readiness Level:")
@Html.TextAreaFor(o => o.ChangeProposalHeader.ChangeProposal.TechnicalReadinessCategory)
<br />
@Html.LabelFor(o => o.ChangeProposalHeader.ChangeProposal.DesignChangeRequirementCategory, "Design Change Requirement Category:")
@Html.TextAreaFor(o => o.ChangeProposalHeader.ChangeProposal.DesignChangeRequirementCategory)
<br />
@Html.LabelFor(o => o.ChangeProposalHeader.ChangeProposal.FitType, "Fit Type:")
@Html.RadioButtonForEnum(o => o.ChangeProposalHeader.ChangeProposal.FitType)
</div>
<div class="5050SplitRight">
</div>
</div></text>);
Heres the code for the Helper (I got this from another thread on SO)
public static class HtmlExtensions
{
public static MvcHtmlString RadioButtonForEnum<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression
)
{
var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
var names = Enum.GetNames(metaData.ModelType);
var sb = new StringBuilder();
foreach (var name in names)
{
var id = string.Format(
"{0}_{1}_{2}",
htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix,
metaData.PropertyName,
name
);
var radio = htmlHelper.RadioButtonFor(expression, name, new { id = id }).ToHtmlString();
sb.AppendFormat(
"<label for=\"{0}\">{1}</label> {2}",
id,
HttpUtility.HtmlEncode(name),
radio
);
}
return MvcHtmlString.Create(sb.ToString());
}
}
Thanks in advance.
J
Ok So i think there must be a problem with the RadioBoxForEnum code, as I found a different way of doing this and created an editor template using the following code I found and this works with any issues.
Enum_radioButtonList.cshtml
And this gets called as follows: