Boolean с поддержкой html Hidden и HiddenFor - PullRequest
15 голосов
/ 08 марта 2010

Что с этим случилось? Переменная 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">

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

Ответы [ 4 ]

14 голосов
/ 08 марта 2010

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

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

<input type="hidden" name="the-name" 
  value="<%= Html.AttributeEncode(Model.TheBool) %>" id="TheBool_1216786" />
1 голос
/ 10 марта 2016

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

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

ModelState.Remove("TheBool")

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

0 голосов
/ 30 июня 2016

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

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

ModelSate.Remove("OperationConfirmed");

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

@{
  string btnSaveCaption = "Save Changes";
  if (Model.OperationConfirmed)
  {
    btnSaveCaption = "Confirm Save Changes";
    @Html.Hidden("OperationConfirmed", true)
  }          
} 
0 голосов
/ 02 августа 2014

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

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

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

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