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

#asp.net-mvc-2

#asp.net-mvc-2

Вопрос:

Я пытаюсь сгенерировать скрытый список, поэтому я использую скрытые поля с тем же именем, однако Html.Hidden выводит существующее значение вместо нового. Итак, этот код…

 <% 
    for (int i = 0; i < Model.ProductIds.Count; i  )
    { %>
<%: Html.Hidden("ProductIds", Model.ProductIds[i], new { id=""})%>
<br />
Iteration:<%:i %>
Guid:<%:Model.ProductIds[i]%>
<br />
<% } %>
  

генерирует этот HTML

 <input name="ProductIds" type="hidden" value="48906f4c-1719-43ab-9d7e-c336a71b8624">
<br>
Iteration:0
Guid:48906f4c-1719-43ab-9d7e-c336a71b8624
<br>
<input name="ProductIds" type="hidden" value="48906f4c-1719-43ab-9d7e-c336a71b8624">
<br>
Iteration:1
Guid:b4f01496-dddf-41f2-a05b-43392d779a44
<br>
  

Обратите внимание, что, хотя идентификаторы разные, сгенерированные скрытые поля имеют одинаковое значение. Почему это происходит, и есть ли какой-либо способ обойти это?

Ответ №1:

Я не уверен, почему это происходит, но простой обходной путь — просто создать html самостоятельно:

 <% 
    for (int i = 0; i < Model.ProductIds.Count; i  )
    { %>
<input name="ProductIds" type="hidden" value="<%:Model.ProductIds[i]%>">
<br />
Iteration:<%:i %>
Guid:<%:Model.ProductIds[i]%>
<br />
<% } %>
  

Комментарии:

1. Другое решение, которое я нашел, — <%: Html . Hidden(«productIds», null, new { id=»», Value=Model. productIds[i]})%>

Ответ №2:

Какова цель скрытого списка или нескольких скрытых полей с тем же именем? Не могли бы вы сделать это одним скрытым полем со всеми значениями?

Комментарии:

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

2. 1) Цель, если у него есть список, чтобы при его публикации он был правильно сопоставлен со списком <Guid>, который я могу использовать в своем действии. 2) Я могу сделать это одним полем со всеми значениями, но мне не нравится усложнять ситуацию, когда должен быть возможен более простой способ. 3) Вы понимаете, что задали 2 вопроса в качестве ответа? : D