문제

나는 이것을 직접 해결했다. 원인에 대한 나의 대답을 보았다

컨트롤러 메소드에서 올바르게 설정된 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>

제출 된 양식 값을 확인했으며 정확합니다. 올바른 숫자 ShoppingBasketItemS도 들어갑니다 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; }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top