Я немного покопался в Reflector и заметил, что все методы расширения MVC для полей ввода используют класс InputHelper, который, в свою очередь, использует класс TagBuilder:
private static string InputHelper(this HtmlHelper htmlHelper, InputType inputType, string name, object value, bool useViewData, bool isChecked, bool setId, bool isExplicitValue, IDictionary<string, object> htmlAttributes)
{
ModelState state;
if (string.IsNullOrEmpty(name))
{
throw new ArgumentException(MvcResources.Common_NullOrEmpty, "name");
}
TagBuilder builder = new TagBuilder("input");
builder.MergeAttributes<string, object>(htmlAttributes);
builder.MergeAttribute("type", HtmlHelper.GetInputTypeString(inputType));
builder.MergeAttribute("name", name, true);
string str = Convert.ToString(value, CultureInfo.CurrentCulture);
bool flag = false;
switch (inputType)
{
case InputType.CheckBox:
//...etc.
Ниже приведены несколько операторов case, охватывающих дополнительный рендеринг, необходимый для различных типов ввода. Но вы поняли. Люди в MVC не объединяют строки; они используют методы MergeAttribute (и другие), чтобы сделать за них грязную работу. Я думаю, что в этом есть и кое-что хорошее для совместимости браузера.
Я предлагаю вам использовать класс TagBuilder для создания своего HTML, как это делают люди MVC.