"неожиданно" обнаружил, что id и name работают в общем-то независимо.
id самому mvc вообще непонятно зачем нужен, а name используется для ModelBinding.
То, что уже пришлось сделать, это переписать RadioButton:
public static ExtXmlWriter RadioButton<TModel, TValue>(this ExtXmlWriter writer, TModel model, Expression<Func<TModel, TValue>> expression, string uniqueRadioButtonId, object value, bool isChecked) {
string groupName = ExpressionHelper.GetExpressionText(expression);
return RadioButton(writer, uniqueRadioButtonId, groupName, value, isChecked, null);
}
public static ExtXmlWriter RadioButton(this ExtXmlWriter writer, string uniqueRadioButtonId, string groupName, object value, bool isChecked) {
return RadioButton(writer, uniqueRadioButtonId, groupName, value, isChecked, null);
}
public static ExtXmlWriter RadioButton(this ExtXmlWriter writer, string uniqueRadioButtonId, string groupName, object value, bool isChecked, object htmlAttributes) {
writer.WriteStartElement("input");
writer.WriteAtrribute("type", "radio");
writer.WriteAtrribute("id", uniqueRadioButtonId);
writer.WriteAtrribute("name", groupName);
if (isChecked) {
writer.WriteAtrribute("checked", "checked");
}
writer.WriteAtrribute("value", Convert.ToString(value));
writer.WriteEndElement();
return writer;
}
что дало возможность использовать и биндинг во View
xml.Span(() => {
xml.RadioButton(this.Model, m => m.FormModel.IsNewCompany, "radio_new", "true", true);
xml.Span("New Company");
});
xml.Span(() => {
xml.RadioButton(this.Model, m => m.FormModel.IsNewCompany, "radio_existent", "false", false);
xml.Span("Existent Company");
});
и jQuery без завязки на это бинденное имя
var ApplyVisibility = function() {
var chk_new_checked = $("#radio_new").is(":checked");
var chk_existent_checked = $("#radio_existent").is(":checked");
var div_new = $("#div_new");
var div_existent = $("#div_existent");
if (chk_new_checked) {
div_new.show();
} else {
div_new.hide();
}
if (chk_existent_checked) {
div_existent.show();
} else {
div_existent.hide();
}
};
т.е. я теперь могу переименовать свойство IsNewCompany без необходимости переделывать скрипт.
И вот теперь подумалось, а может быть все свои контролы таким образом написать — т.е. всегда иметь возможность определить удобный для jQuery id без влияния на биндинг. А если не надо то путь будет генериться в старом стиле.
Как считаете, какие грабли вылезут?