[英]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.