Boolean с html helper Скрытый и скрытый

Что с этим? Переменная viewmodel - это bool со значением true.

<%= Html.HiddenFor(m => m.TheBool) %>
<%= Html.Hidden("IsTimeExpanded",Model.TheBool) %>
<input type="hidden" value="<%=Model.TheBool%>" name="TheBool" id="TheBool">

Результаты в:

<input id="TheBool" name="TheBool" value="False" type="hidden">
<input id="TheBool" name="TheBool" value="False" type="hidden">
<input value="True" name="TheBool" id="TheBool" type="hidden">

Что я делаю неправильно? Почему помощники не работают по назначению?

Ответы

Ответ 1

1) использовать разные (уникальные) идентификаторы

2) не используйте этот помощник, используйте

<input type="hidden" name="the-name" 
  value="<%= Html.AttributeEncode(Model.TheBool) %>" id="TheBool_1216786" />

Ответ 2

Вот пример в бритве:

html:
@Html.HiddenFor(x => Model.TheBool, new { @id = "hdnBool" })

javascript:
alert($('#hdnBool').val());

model:
public class MyModel()
{
  public bool TheBool{ get; set; }
}

Ответ 3

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

В любом случае решение, опубликованное в вышеупомянутом ответе, решит проблему, просто добавьте эту строку, прежде чем вы вернетесь с контроллера:

ModelState.Remove("TheBool")

И да, это немного мусор, потому что вы можете использовать только ссылку на строку... но она работает.

Ответ 4

У меня было подобное, и я обернулся вокруг этого. Ситуация заключается в том, что пользователь хочет сохранить и затем подтвердить сценарий сохранения....

Я решил использовать нижеприведенное решение, а не

ModelSate.Remove("OperationConfirmed");

(который работает), поскольку я чувствую, что он более интуитивный....

@{
  string btnSaveCaption = "Save Changes";
  if (Model.OperationConfirmed)
  {
    btnSaveCaption = "Confirm Save Changes";
    @Html.Hidden("OperationConfirmed", true)
  }          
}