簡體   English   中英

在一個視圖上有多種形式

[英]Multiple Forms On One View

請原諒一些代碼的混亂。 我正在嘗試創建一個顯示文本輸入的頁面,並提供多個選項以提交具有不同參數的帖子,同時還為列表中包含的每個項目傳遞文本輸入的值。 我將List作為ViewModel的屬性傳遞給視圖。

我有一個For循環,它遍歷列表,為循環中的每個項目生成單獨的表單。

@for(int s =0;s<Model.stocklist.Count; s++)
{
using(Html.BeginForm("ProcessTransaction","MoveProductByInventory",FormMethod.Post))
{
           @Html.DisplayFor(m => m.stocklist[s].StorageLocation.Description)
    <span>
    @Html.DisplayFor(m => m.stocklist[s].UnitCurrent)
    </span>
    @Html.EditorFor(m => m.tranamount)
    @Html.HiddenFor(m => m.transunittype)
    @Html.HiddenFor(m => m.trantypeenum)
    @Html.HiddenFor(m => m.stocklist[s].StockID)
    <input type="submit" name="Submit" value="Add" id="btnadd" />
    <input type="submit" name="Submit" value="Remove" id="btnremove"/>
}
}

循環的第一次迭代工作正常,但由於某些原因,第2、3rd等值被傳回null。

具體而言,stocklist屬性包含Stock對象,其定義如下:

        public List<Stock> stocklist { get; set; }

我希望ViewModel.stocklist包含與我在由for循環的迭代生成的頁面上選擇的“提交”按鈕相關的Stock對象。

   @Html.HiddenFor(m => Model.stocklist[s].StockID) 

正在為每次循環迭代在頁面上生成正確的StockID值。 由於某種原因,提交特定表單時(第一次迭代除外),庫存清單未帶入庫存對象。 它引發空引用異常,並且庫存清單為空。 提交頁面上的第一個表單時,庫存清單中會填充正確的庫存對象。

請讓我知道是否有更好的方法,因為這正是我想出的。

謝謝

只要有可能,就應在lambda函數中使用___For的lambda參數(在本例中為m ):

@for(int s =0;s<Model.stocklist.Count; s++)
{
    using(Html.BeginForm("ProcessTransaction","MoveProductByInventory",FormMethod.Post))
    {
        @Html.DisplayFor(m => m.stocklist[s].StorageLocation.Description)
        <span>
        @Html.DisplayFor(m => m.stocklist[s].UnitCurrent)
        </span>
        @Html.EditorFor(m => m.tranamount)
        @Html.HiddenFor(m => m.transunittype)
        @Html.HiddenFor(m => m.trantypeenum)
        @Html.HiddenFor(m => m.stocklist[s].StockID)
        <input type="submit" name="Submit" value="Add" id="btnadd" />
        <input type="submit" name="Submit" value="Remove" id="btnremove"/>
    }
}

通常,這應該會產生最佳結果,我相信在這種情況下,它將解決您的問題。

至於原因,@ TrueBlueAussie在評論中提供了以下說明:

DisplayFor和其他方法使用反射將lambda表達式的表達式樹分解開來創建客戶端元素的命名,因此lambda表達式的上下文必須匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM