[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 без влияния на биндинг. А если не надо то путь будет генериться в старом стиле.

Как считаете, какие грабли вылезут?
всю ночь не ем, весь день не сплю — устаю
Re: [MVC] Id и Name
От: mogadanez Чехия  
Дата: 23.08.10 12:44
Оценка:
Здравствуйте, Neco, Вы писали:

N>"неожиданно" обнаружил, что id и name работают в общем-то независимо.

N>id самому mvc вообще непонятно зачем нужен, а name используется для ModelBinding.

поздравляю =),
только name в общем случае используется не для ModelBinding а для поста данных из формы.
а ID вообще никому не нужен, и в mvc приложении вставлять его для каждого элемента в общем то бред


<skip>

N>т.е. я теперь могу переименовать свойство IsNewCompany без необходимости переделывать скрипт.


N>И вот теперь подумалось, а может быть все свои контролы таким образом написать — т.е. всегда иметь возможность определить удобный для jQuery id без влияния на биндинг. А если не надо то путь будет генериться в старом стиле.


N>Как считаете, какие грабли вылезут?


никаких =)
Re[2]: [MVC] Id и Name
От: Neco  
Дата: 23.08.10 13:40
Оценка:
Здравствуйте, mogadanez, Вы писали:

M> только name в общем случае используется не для ModelBinding а для поста данных из формы.

M>а ID вообще никому не нужен, и в mvc приложении вставлять его для каждого элемента в общем то бред
эх, надо ж как меня веб-формсы испортили — даже такой элементарной вещи о вебе не знал.
хотя веб-формсы тут наверно ни при чём — сам ленивый.

в общем, учитывая всё это буду считать, что идея неплохая ))
всю ночь не ем, весь день не сплю — устаю
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.