Ответ 1
Вместо этого используйте подчеркивание
@data_placeholder = "whatever"
Так как Mvc3 "_" заменяется на "-" при визуализации.
Это отлично работает, поскольку символы подчеркивания неприемлемы в именах атрибутов в html.
Вопрос: Мне нужно создать раскрывающийся список:
<select id="ddCustomers" data-placeholder="Choose a customer" class="chzn-select" style="width:350px;" tabindex="1" multiple>
Теперь я могу добавить настраиваемые атрибуты, например:
@Html.DropDownListFor(m => m.Id, Model.Values, new { @disabled = "disabled" })
К сожалению, если в имени переменной есть "-", то она не компилируется.
@Html.DropDownListFor(m => m.Id, Model.Values, new { @disabled = "disabled", @data-placeholder = "whatever" })
А как насчет множественности, которая не имеет значения атрибута?
Если я передаю словарь или NameValueColletion вместо new { @disabled = "disabled" }
, тогда он выдает свойства NameValueColletion/Dictionary...
Как передать атрибуты со специальными символами в ключе атрибута?
Вместо этого используйте подчеркивание
@data_placeholder = "whatever"
Так как Mvc3 "_" заменяется на "-" при визуализации.
Это отлично работает, поскольку символы подчеркивания неприемлемы в именах атрибутов в html.
А, это легко.
Ошибка заключалась в том, чтобы объявить словарь <string, string>
вместо словаря <string, object>
(и использовать переменные вместо свойств в cOption)...
Со словарем <string, string>
он использует перегрузку объекта "paramlist" вместо IDictionary<string, object>
;)
@Html.DropDownListFor(model => model.Title, new SelectList(Model.ls, "value", "text"), Model.nvc)
<!--
@Html.DropDownList("myIdAndName", new SelectList(Model.ls, "value", "text"), Model.nvc)
-->
public ActionResult Index()
{
cHomeModel HomeModel = new cHomeModel();
HomeModel.nvc.Add("class", "chzn-select");
HomeModel.nvc.Add("data-placeholder", "Choose a customer");
HomeModel.nvc.Add("style", "width:350px;");
HomeModel.nvc.Add("tabindex", "1");
HomeModel.nvc.Add("multiple", "multiple");
HomeModel.nvc.Add("id", "lol");
cOption option = null;
for (int i = 0; i < 10; ++i)
{
option = new cOption();
option.value = i.ToString();
option.text = "text" + i.ToString();
HomeModel.ls.Add(option);
}
return View(HomeModel);
}
public class cOption
{
public string value
{
get;
set;
}
public string text
{
get;
set;
}
}
public class cHomeModel
{
public string Title = "MyDropDownListName";
public List<cOption> ls = new List<cOption>();
public System.Collections.Generic.Dictionary<string, object> nvc = new System.Collections.Generic.Dictionary<string, object>();
}
или больше Linqiq:
public ActionResult Index()
{
cHomeModel HomeModel = new cHomeModel();
HomeModel.nvc.Add("class", "chzn-select");
HomeModel.nvc.Add("data-placeholder", "Choose a customer");
HomeModel.nvc.Add("style", "width:350px;");
HomeModel.nvc.Add("tabindex", "1");
HomeModel.nvc.Add("multiple", "multiple");
HomeModel.nvc.Add("id", "lol");
HomeModel.ls = System.Linq.Enumerable.Range(0, 9)
.Select(x => new cOption() { text = x.ToString(), value = x.ToString() })
.ToList();
// or otherwise:
HomeModel.ls = (
from i in System.Linq.Enumerable.Range(0, 9)
select new cOption() { text = i.ToString(), value = i.ToString() }
).ToList();
return View(HomeModel);
}