2013-03-12 56 views
1

我有這個視圖,其中我需要顯示兩次相同的項目。所以我傳遞了一個我的模型列表,並且這個列表包含兩個相同的項目。在同一個id列表中的2個相同的項目獲取在視圖中修改的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 2013-03-12 14:45:55

+0

好的,我會爲此做點事情。 – hsim 2013-03-12 14:46:43

+0

@HerveS您是否使用HTML 5? – 2013-03-12 14:48:00

回答

1

您可以使用簡單的HTML隱藏字段控制

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

這實際上有效!我很驚訝!謝謝:) – hsim 2013-03-12 17:34:36

+1

實際上當你使用「@ Html.HiddenFor(x => x [i] .OtrObjID)」時,那麼控件的屬性會自動呈現。所以你不能操縱它。 – 2013-03-12 19:00:24

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 2013-03-12 15:38:12

+0

我有點生疏,而且我不能100%確定我的解決方案可行。但它是在正確的道路上:)。如果它不起作用,我會幫你找出另一種方法。 – 2013-03-12 15:55:48

+0

沒問題。我有很多工作要做,因爲這個視圖不是原來的視圖,所以我需要改變你介紹的這個新的ViewModel類的所有內容,但事情正在順利完成,應該在下午(這裏下午12點)完成。 要去吃東西,我會在稍後讓你回來;) – hsim 2013-03-12 16:03:31

相關問題