2016-12-21 19 views
-1

Я пытаюсь заменить некоторые html с помощью html-помощников, и я пытаюсь передать словарь HTMLAttributes в методе CheckboxFor helper. Моя проблема в том, что я не знаю, как заставить это выражение работать как параметр объекта для моего экземпляра словаря для проверенного идентификатора. HTML выглядит следующим образомПередача @ (Model.newsletterOptin? True: false) значение в проверенный ключ внутри словаря для htmlhelper

<input type="checkbox" 
    id="newsletterOptin" 
    name="newsletterOptin" 
    checked="@(Model.newsletterOptin ? true : false)" /> 

и помощник выглядит так

@Html.CheckBoxFor(m => m.newsletterOptin, new Dictionary<string, object>() { 
    { "id", "newsletterOptin" }, 
    { "checked", "@(Model.newsletterOptin ? true : false)" } 
}) 

Как я могу передать @(Model.newsletterOptin ? true : false) так, что он правильно использовать?

+0

Что вы пытаетесь сделать здесь? 'CheckBoxFor()' правильно устанавливает атрибут 'checked' на основе значения свойства (если' newsletterOptin' является 'true', флажок будет проверен, в противном случае он будет снят). Ваша попытка просто завинчивает привязку модели , И оба параметра 'checked =" true "и' checked = "false" 'идентичны - оба устанавливают свойство' checked' - это наличие или отсутствие атрибута, который определяет его его проверочный –

+0

И установка 'new {" id "," newsletterOptin "}' бессмысленно - 'CheckBoxFor()' (и все методы 'HtmlHelper', которые генерируют элементы управления формой), устанавливают атрибут' id' на основе имени свойства. Просто переписывайте его с тем же значением, если оно уже есть. –

ответ

0

Ваш помощник начинается с знака @, который запускает блок кода в ASP.NET Razor. Вам не нужно использовать @ снова, потому что вы можете записать его как любой другой обычный C# код:

@Html.CheckBoxFor(m => m.newsletterOptin, new Dictionary<string, object> { 
    { "id", "newsletterOptin" }, 
    { "checked", Model.newsletterOptin ? "true" : "false" } 
})