ILIST <> 매개 변수를 바인딩하는 ASP.NET MVC 모델
-
19-08-2019 - |
문제
나는 이것을 직접 해결했다. 원인에 대한 나의 대답을 보았다
컨트롤러 메소드에서 올바르게 설정된 ILIST <> 인수에 대한 형식 값을 얻는 데 어려움이 있습니다.
내 컨트롤러 클래스는 다음과 같습니다.
public class ShoppingBasketController : Controller {
public ActionResult Index() {
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Add(IList<ShoppingBasketItem> items) {
Session["basket"] = items; // for testing
return RedirectToAction("Index");
}
}
public class ShoppingBasketItem {
public int ItemID;
public int ItemQuantity;
}
약간 다듬어진 양식 :
<% using (Html.BeginForm("Add", "ShoppingBasket")) { %>
<% int codeIndex = 0;
foreach (Product product in products) { %>
<%= Html.Hidden("items[" + codeIndex + "].ItemID", product.Id) %>
<%= Html.TextBox("items[" + codeIndex + "].ItemQuantity", "0", new { size = "2"}) %>
<% codeIndex++;
}
} %>
다음과 같은 마크 업을 생성합니다.
<form action="/Basket/Add" method="post">
<input id="items[0]_ItemID" name="items[0].ItemID" type="hidden" value="1" />
<input id="items[0]_ItemQuantity" name="items[0].ItemQuantity" size="2" type="text" value="0" />
<input id="items[1]_ItemID" name="items[1].ItemID" type="hidden" value="2" />
<input id="items[1]_ItemQuantity" name="items[2].ItemQuantity" size="2" type="text" value="0" />
<input id="items[2]_ItemID" name="items[2].ItemID" type="hidden" value="3" />
<input id="items[2]_ItemQuantity" name="items[2].ItemQuantity" size="2" type="text" value="0" />
</form>
제출 된 양식 값을 확인했으며 정확합니다. 올바른 숫자 ShoppingBasketItem
S도 들어갑니다 Session["basket"
] 그러나 둘 다 ItemID
그리고 ItemQuantity
각각은 0입니다. 양식 값 목록을 올바르게 디코딩하는 것처럼 보이지만 속성 자체를 선택하지는 않습니다.
MVC RC2를 사용하고 있으며 An을 기반으로합니다 Scott Hanselman의 기사 내 코드가 정확하다고 확신합니다. 내가 뭔가를 놓치고 있습니까?
해결책
해결책
MVC 소스를 다운로드 한 후에도 여전히 작동하지 않는 이유를 알 수 없었기 때문에 제 1 형이 바인딩하려는 유형과 관련이 있다고 가정했습니다. 물론, 값은 속성과 달리 멤버 변수 인 범인이었습니다. 모델 바인더는 반사를 사용하여 속성을 설정하여 호출을 통해 찾지 못했기 때문입니다. TypeDescriptor.GetProperties(Type)
.
값 클래스를 업데이트하면이 문제를 해결했습니다 (몇 시간 동안 머리를 쳐서 벽에서 추가해야합니다 !!) :
public class ShoppingBasketItem {
public int ItemID { get; set; }
public int ItemQuantity { get; set; }
}
제휴하지 않습니다 StackOverflow