2013-03-12 4 views
1

У меня есть этот вид, в котором мне нужно отображать дважды тот же элемент. Поэтому я передаю список своей модели, и этот список содержит в два раза один и тот же элемент.2 одинаковых элемента в списке с одинаковым значением id get id, измененным в поле зрения

Вот как я их отображения:

<p> 
    @using (Html.BeginForm("Confirm", "Inventory")) 
    { 

     <table> 
     <tr> 
      <th>Item Name</th> 
       (...) 
     </tr> 
      @for (int i = 0; i < Model.Count; i++) 
      { 
       <tr> 
        <td>@Html.DisplayFor(x => x[i].OtrObj.ObjName)</td> 
        (...) 

        @Html.HiddenFor(x => x[i].OtrObjID) 
       </tr> 
      } 
     </table> 
     <div class="float-right"> 
      <input type="submit" value="Ready!"/>  
     </div> 
    } 
</p> 

Я уверен, что это происходит с точки зрения, потому что только тогда, когда я посылаю мнение, каждый из элементов в моем списке несет право «ObjId».

Но когда страница отображается, результат таков:

Пункт 1:

<input data-val="true" data-val-number="The field OtrObjID must be a number." 
    data-val-required="The OtrObjID field is required." 
    name="[0].OtrObjID" type="hidden" value="1" /> 

Пункт 2:

<input data-val="true" data-val-number="The field OtrObjID must be a number." 
    data-val-required="The OtrObjID field is required." 
    name="[1].OtrObjID" type="hidden" value="2" /> 

Почему? Я действительно не понимаю. Может ли кто-нибудь помочь мне в этом?

Вот HTML выход для этих элементов:

<p> 
    <form action="/Inventory/Confirm" method="post">   
     <table> 
      <tr> 
       <th>Item Name</th> 
       ... 
      </tr> 
       <tr> 
        <td>Item one</td> 

        <td><input checked="checked" class="state1" name="[0].Destination" style="width: 50px" type="radio" value="State 1" /></td> 
        <td><input class="state2" name="[0].Destination" style="width: 50px" type="radio" value="State 2" /></td> 
        <td> 
         <input class="field1" data-val="true" data-val-number="The field m_Field1 must be a number." data-val-required="The m_Field1 field is required." name="[0].m_Field1" style="width:200px" type="text" value="0,99" /> 
         <span class="field-validation-valid" data-valmsg-for="[0].m_Field1" data-valmsg-replace="false">Field 1 must be a number.</span> 
        </td> 
        <td> 
         <input class="field2" data-val="true" data-val-number="The field m_Field2 must be a number." data-val-required="The m_Field2 field is required." name="[0].m_Field2" style="width:200px" type="text" value="1,00" /> 
         <span class="field-validation-valid" data-valmsg-for="[0].m_Field2" data-valmsg-replace="false">Field 2 must be a number.</span> 
        </td> 
        <td> 
         <input class="field3" data-val="true" data-val-number="The field m_Field3 must be a number." data-val-required="The m_Field3 field is required." name="[0].m_Field3" style="width:200px" type="text" value="1,00" /> 
         <span class="field-validation-valid" data-valmsg-for="[0].m_Field3" data-valmsg-replace="false">Field 3 must be a number.</span> 
        </td> 
        <td><a href="/Inventory/DisplayItem/2">See other information</a></td> 

        <input data-val="true" data-val-number="The field OtrObjID must be a number." data-val-required="The OtrObjID field is required." name="[0].OtrObjID" type="hidden" value="1" /> 
        <input data-val="true" data-val-number="The field ObjID must be a number." data-val-required="The ObjID field is required." name="[0].ObjID" type="hidden" value="1" /> 
        <input name="[0].m_Field1" type="hidden" value="0,99" /> 
        <input name="[0].m_Field2" type="hidden" value="1,00" /> 
        <input name="[0].m_Field3" type="hidden" value="1,00" /> 
       </tr> 
       <tr> 
        <td>Item 2</td> 

        <td><input checked="checked" class="state1" name="[1].Destination" style="width: 50px" type="radio" value="State 1" /></td> 
        <td><input class="state2" name="[1].Destination" style="width: 50px" type="radio" value="State 2" /></td> 
        <td> 
         <input class="field1" data-val="true" data-val-number="The field m_Field1 must be a number." data-val-required="The m_Field1 field is required." name="[1].m_Field1" style="width:200px" type="text" value="0,99" /> 
         <span class="field-validation-valid" data-valmsg-for="[1].m_Field1" data-valmsg-replace="false">Field 1 must be a number.</span> 
        </td> 
        <td> 
         <input class="field2" data-val="true" data-val-number="The field m_Field2 must be a number." data-val-required="The m_Field2 field is required." name="[1].m_Field2" style="width:200px" type="text" value="1,00" /> 
         <span class="field-validation-valid" data-valmsg-for="[1].m_Field2" data-valmsg-replace="false">Field2 must be a number.</span> 
        </td> 
        <td> 
         <input class="field3" data-val="true" data-val-number="The field m_Field3 must be a number." data-val-required="The m_Field3 field is required." name="[1].m_Field3" style="width:200px" type="text" value="1,00" /> 
         <span class="field-validation-valid" data-valmsg-for="[1].m_Field3" data-valmsg-replace="false">Field 3 must be a number.</span> 
        </td> 
        <td><a href="/Inventory/DisplayItem/2">See other information</a></td> 

        <input data-val="true" data-val-number="The field OtrObjID must be a number." data-val-required="The OtrObjID field is required." name="[1].OtrObjID" type="hidden" value="2" /> 
        <input data-val="true" data-val-number="The field ObjID must be a number." data-val-required="The ObjID field is required." name="[1].ObjID" type="hidden" value="2" /> 
        <input name="[1].m_Field1" type="hidden" value="0,99" /> 
        <input name="[1].m_Field2" type="hidden" value="1,00" /> 
        <input name="[1].m_Field3" type="hidden" value="1,00" /> 
       </tr> 
     </table> 
     <div class="float-right"> 
      <input type="submit" value="Ready!"/>  
     </div> 
    </form> 
</p> 
+0

Вы можете разместить весь вывод HTML, а не только фрагменты? – rae1

+0

Хорошо, я сделаю что-нибудь для этого. – hsim

+0

@HerveS Вы используете HTML 5? –

ответ

1

Вы можете использовать управление простого HTML скрытых полей

<input type="hidden" value="x[i].OtrObjID" name="OtrObjID" /> 
+0

Это действительно работает! Я удивлен! Спасибо :) – hsim

+1

Фактически, когда вы используете «@ Html.HiddenFor (x => x [i] .OtrObjID)», то свойства элемента управления отображаются автоматически. Поэтому вы не можете манипулировать им. –

2

«Проблема» в том, что у вас есть @model IEnumerable<Model>, что будет принуждать префикс [#].

Одним из возможных решений было бы обернуть вашу модель внутри ViewModel.

public class ViewModel 
{ 
    public IEnumerable<Model> Models { get; set; } 
} 

И затем использовать @model ViewModel

Я хотел бы также предложить использование @foreach, как это чище.

@foreach (var item in Model.Models) { 
    <tr> 
     <td> 
      @Html.DisplayFor(x => item.ObjName) 
      (...) 
      @Html.HiddenFor(x => item.OtrObjID) 
     </td> 
    </tr> 
} 

Примечание: Я положил все внутри <td>, как это не действует HTML, чтобы иметь что-либо иное, чем <td> или <th> внутри <tr> тега. http://www.w3schools.com/tags/tag_tr.asp

+0

Серьезно? Вау, это интересно! Я попробую это и верну тебе. – hsim

+0

Я немного ржавый, и я не уверен на 100%, что мое решение будет работать. Но это на правильном пути :). Если это не сработает, я помогу вам разобраться в другом. –

+0

Нет проблем.У меня много работы, так как это представление не является оригинальным, поэтому мне нужно изменить все на этот новый класс ViewModel, который вы ввели, но все идет вперёд и должно быть сделано во второй половине дня (12 вечера здесь). Gotta go eat, я верну вам это позже;) – hsim

 Смежные вопросы

  • Нет связанных вопросов^_^