[MVC] Id и Name
От: Neco  
Дата: 19.08.10 06:57
Оценка:
"неожиданно" обнаружил, что 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 без влияния на биндинг. А если не надо то путь будет генериться в старом стиле.

Как считаете, какие грабли вылезут?
всю ночь не ем, весь день не сплю — устаю
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.