Если вы хотите использовать HtmlHelper для всего, что вы делаете, вы можете вернуть MvcHtmlString, созданную с помощью TabBuilder
Вот пример того, что я использую:
public static MvcHtmlString AccountsDropDown(this HtmlHelper helper, string name, object htmlAddributes = null, bool addNull = false, Guid? selected = null)
{
Account acc = HttpContext.Current.Session["account"] as Account;
TagBuilder tb = new TagBuilder("select");
tb.GenerateId(name);
tb.Attributes["name"] = name;
if (addNull)
tb.InnerHtml += string.Format("<option value= '{0}'> {1} </option>", "", "None");
Dictionary<Guid, String> accounts;
if (acc.Master)
accounts = db.Account.ToDictionary(x => x.Id, x => x.Name);
else
accounts = db.Account.Where(x => x.Id == acc.Id).ToDictionary(x => x.Id, x => x.Name);
foreach (var account in accounts)
tb.InnerHtml += string.Format(
"<option value= '{0}' {2}> {1} </option>",
account.Key,
account.Value,
selected == account.Key ? " selected='selected' " : ""
);
return new MvcHtmlString(tb.ToString());
}