코드의 복잡성을 용서하십시오. 나는 텍스트 입력을 표시하는 페이지를 만들려고하고 여러 매개 변수가있는 게시물을 제출하는 여러 옵션을 제공하면서 목록에 포함 된 모든 항목의 텍스트 입력 값도 전달합니다. 뷰에 ViewModel의 속성으로 List를 전달합니다.하나의보기에서 여러 양식
루프의 각 항목에 대한 개별 폼을 생성하는 목록을 반복하는 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가, 3가, 그래서 값에 다시 널 (null)로 전달되고있다.
특히,의 stocklist 속성은 주식 개체를 포함하고 다음과 같이 정의된다 :
public List<Stock> stocklist { get; set; }
내가 어느 내가 페이지에 선택하고 제출 버튼에 해당 주식 개체를 포함하도록 ViewModel.stocklist을 기대하고 그 for 루프의 반복에 의해 생성되었습니다.
@Html.HiddenFor(m => Model.stocklist[s].StockID)
은 각 루프 반복마다 페이지에 적절한 스톡 ID 값을 생성합니다. 어떤 이유로 주식형은 특정 양식이 제출 될 때 (첫 번째 반복을 제외하고) stock 오브젝트를 가져 오지 않습니다. 그것은 null 참조 예외를 throw하고 stocklist는 null입니다. 페이지의 첫 번째 양식이 제출되면 stocklist는 적절한 주식 개체로 채워집니다.
더 나은 접근 방식이 있다면 알려주세요. 이것은 내가 생각해 낸 것입니다. 이것은 일반적으로 최상의 결과를 제공한다
@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"/>
}
}
, 나는 생각 :
감사
인덱서가 0에서 시작하여 연속되어야하기 때문에 첫 번째 양식 (POST 메서드에 매개 변수 'IEnumerable model'이있는 경우에만)을 제외하고는 무엇을 할 수 있습니까? 진짜 질문은 왜 이러는거야? –
답장을 보내 주셔서 감사합니다. 내가보기에 전달 된 stocklist에 포함 된 모든 레코드에 대한 데이터를 입력하는 빠른 방법을 만들려고합니다. 다음 이미지는 제가 말하는 의미를 보여줍니다 : http://imgur.com/Ec3R51D. 어쩌면 모든 stocklist 항목을 통해 반복하고 하나의 제출 단추를 사용하여 모든 값을 제출하는 단일 폼을보아야 할 것입니다. –
그게 문제를 해결하고 더 나은 사용자 인터페이스가 될 것입니다. 그리고 현재 잘못된 html ('@ Html.EditorFor (m => m.tranamount)','@ Html.HiddenFor (m => m.transunittype)'등으로 많은 중복 ID를 생성하고 불필요한 컨트롤을 많이 생성합니다. 성능이 저하되고 있습니다. –