1

このビューでは、同じアイテムを 2 回表示する必要があります。したがって、モデルのリストを渡すと、このリストには同じ項目が 2 回含まれています。

それらを表示する方法は次のとおりです。

<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>
4

2 に答える 2

2

「問題」は、プレフィックス@model IEnumerable<Model>を強制することです。[#]

考えられる解決策の 1 つは、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>以外<td>またはタグ<th>内に何かを含めることは有効なHTMLではないため、すべてを<tr>タグ内に配置します。http://www.w3schools.com/tags/tag_tr.asp

于 2013-03-12T15:35:09.567 に答える
1

シンプルなhtml隠しフィールドコントロールを使用できます

<input type="hidden" value="x[i].OtrObjID" name="OtrObjID" />
于 2013-03-12T16:07:46.333 に答える