Ответ 1
1) использовать разные (уникальные) идентификаторы
2) не используйте этот помощник, используйте
<input type="hidden" name="the-name"
value="<%= Html.AttributeEncode(Model.TheBool) %>" id="TheBool_1216786" />
Что с этим? Переменная 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) использовать разные (уникальные) идентификаторы
2) не используйте этот помощник, используйте
<input type="hidden" name="the-name"
value="<%= Html.AttributeEncode(Model.TheBool) %>" id="TheBool_1216786" />
Вот пример в бритве:
html:
@Html.HiddenFor(x => Model.TheBool, new { @id = "hdnBool" })
javascript:
alert($('#hdnBool').val());
model:
public class MyModel()
{
public bool TheBool{ get; set; }
}
Как было сказано здесь, проблема заключается в том, что по умолчанию помощники HTML используют опубликованные значения (если они есть), то обратитесь к модели. Лично я не думаю, что это создает целую кучу смысла и теперь задается вопросом, сколько других ошибок лежит в ожидании всей нашей платформы.
В любом случае решение, опубликованное в вышеупомянутом ответе, решит проблему, просто добавьте эту строку, прежде чем вы вернетесь с контроллера:
ModelState.Remove("TheBool")
И да, это немного мусор, потому что вы можете использовать только ссылку на строку... но она работает.
У меня было подобное, и я обернулся вокруг этого. Ситуация заключается в том, что пользователь хочет сохранить и затем подтвердить сценарий сохранения....
Я решил использовать нижеприведенное решение, а не
ModelSate.Remove("OperationConfirmed");
(который работает), поскольку я чувствую, что он более интуитивный....
@{
string btnSaveCaption = "Save Changes";
if (Model.OperationConfirmed)
{
btnSaveCaption = "Confirm Save Changes";
@Html.Hidden("OperationConfirmed", true)
}
}