asp.net-mvc3 Editor для вопроса имени шаблона - PullRequest
7 голосов
/ 22 ноября 2011

У меня странная проблема с редактором для помощника из MVC3.Вот в чем дело: я пытаюсь отобразить checkboxList, и он работает, если я не называю explicity именем шаблона.Однако, если я пытаюсь использовать имя шаблона, он выдает исключение, говорящее, что я пытаюсь передать общий список, когда я должен просто передать мою viewModel.Я покажу некоторый код, чтобы сделать его более понятным:

ViewModel

public class ChkViewModel
{
  public string ContractName {get;set;}
  public string Contract {get;set;}
  public bool Checked {get;set;}
}

Шаблон EditorFor (он называется ContractTemplate)

@model Models.ChkViewModel
<p>
    @Html.HiddenFor(x => x.Contract )
    @Html.LabelFor(x => x.ContractName , Model.ContractName )
    @Html.CheckBoxFor(x => x.Checked, new { @class = "chkContract" })
&nbsp;       
</p>  

Выдержка из моего представления

<div id="contractContainer">
  @Html.EditorFor(item=>item.ContractList)
</div>

Это отлично работает.Но он пытается сделать это:

<div id="contractContainer">
  @Html.EditorFor(item=>item.ContractList, "ContractTemplate")
</div>

Выдает InvalidOperationException сообщение о том, что мне нужно передать простую ChkViewModel, а не GenericList ChkViewModel.

Я спрашиваю только об этом, потому чтоЯ пытался создать еще один список флажков, и я не мог заставить его работать (даже не отображать флажки), и когда я попытался установить имя шаблона, чтобы я мог хотя бы увидеть флажки, он выдал эту ошибку.

1 Ответ

6 голосов
/ 22 ноября 2011

Сообщение об ошибке является правильным, если вы хотите использовать имя шаблона, оно должно выглядеть следующим образом:

<div id="contractContainer">
    @for (int i = 0; i < item.ContractList.Count; i++) {
        @Html.EditorFor(item => item.ContractList[i], "ContractTemplate")
    }
</div> 

Это похоже на то, что ASP.NET MVC делает за вас впервый случай (он перебирает коллекцию и вызывает ваш шаблон).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...